以下轉錄自:http://program-lover.blogspot.com/2008/06/bubble-sort_20.html 氣泡排序法(bubble sort)是排序演算法(sorting algorithm)中較簡略單純 翻譯一種 翻譯社而其運作 翻譯道理是藉由逐次比力相鄰 翻譯兩筆資料,並遵照排序條件(由大至小或由小至大)交流資料直到排序完成為止。
假定此刻我們需要將 n 筆資料 A1、A2、......、An 由小排到大,則先比較 A1 與 A2,若是 A1 < A2 則交流兩筆資料。接著對照 A2 與 A3,若是 A2 < A3 則交流兩筆資料。以此類推,一向到比較完 An - 1 與 An 為止 翻譯社
如許就完了嗎?固然還沒。不外到今朝為止,我們已肯定 An 是 n 筆資猜中最大 翻譯數字。
接下來,重複方才的動作:對照 A1 與 A2、A2 與 A3、A3 與 A4、......,分歧的是,這一次只需要比力到 An - 2 與 An - 1 便可。到目前為止,我們可以肯定 An - 1 是 n 筆資猜中次大的數字 翻譯社
接著就繼續重複一樣的動作,便能肯定每輪比力中 翻譯最大資料,皆在這些資料的最後面 翻譯社直到肯定所有筆資料為止。
其道理的虛擬碼大致如下:
void bubblesort(Type data[1..n])
{
Index i 翻譯公司 j;
for (i = n to 1)
{
for (j = 1 to i - 1)
{
if (data[j] < data[j + 1])
{
exchange data[j] and data[j + 1];
}
}
}
}
讓我們舉個例來講明。若是我們如今要將以下這些資料由大排到小:
1 43 6 79 50 2
則第一輪的比力與互換過程以下:
43 1 6 79 50 2
43 6 1 79 50 2
43 6 79 1 50 2
43 6 79 50 1 2
43 6 79 50 2 1
第二輪的對照與互換過程以下:
43 6 79 50 2 1
43 79 6 50 2 1
43 79 50 6 2 1
43 79 50 6 2 1
接下來以此類推。
由此可以看到,資估中較小的一筆會藉由交流漸漸"浮"到資料頂端,其氣泡排序之名也是因此而來的 翻譯社
而在另外一方面,我們也能夠留意到,若是要利用氣泡排序法將 n 筆資料排序,需要進行的對照次數為: (n - 1) + (n - 2) + (n - 3) + ... + 1 = n(n - 1) / 2。。-> 翻譯社|,-> 翻譯公司|的-> 翻譯
對於一種排序演算法而言,如許的比力次數是相當沒有效率的。是以這個方式多半只是被拿來簡單的诠釋排序概念,而不是拿來實際運用。
最後,照老例"附贈"一個 C 說話實現泡泡排序法的程式:
#include <stdio.h>
#include <stdlib.h>
void bubblesort(int *data 翻譯公司 int n);
int main(void)
{
int i 翻譯公司 n 翻譯公司 data[10];
printf("請輸入資料筆數 n(<= 10): ");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("請輸入第 %d 筆資料: ", i + 1);
scanf("%d", &data[i]);
}
// 履行氣泡排序法
bubblesort(data, n);
printf("
排序後 翻譯結果: ");
for (i = 0; i < n; i++)
{
printf("%d ", data[i]);
}
printf("
");
system("pause");
}
void bubblesort(int *data, int n)
{
int i, j, temp;
for (i = n - 1; i > 0; i--)
{
for (j = 0; j <= i - 1; j++)
{
if (data[j] < data[j + 1])
{
temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
}
}
}
}
來自: http://blog.xuite.net/coke750101/coketech/20830605-%E6%B0%A3%E6%B3%A1%E6%8E%92%E5%BA%8F%E6%B3%95+-+B有關翻譯的問題歡迎諮詢天成翻譯社
留言列表