冒泡排序法的代碼
int n=0;
int temp = 0;
for (int i = a.length - 1; i > 0; --i) {
for (int j = 0; j < i; ++j) {
if (a[j + 1] < a[j]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
n++;
}
}
}
由於我是菜鳥,我寫的是這樣的
int n = 0;
int temp = 0;
for (int i = a.length - 1; i > 0; i--) {
for (int j = i - 1; j >= 0; j--) {
if (a[i] < a[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
n++;
}
}
}
可是我打印出n的值發現冒泡的n值比我寫的那個要大,
比如{2,6,4,7,0,1,3,4,5,8,9,0}
冒泡n==26
下面那個n==21。
很疑惑,為什麼要前後兩個兩個比較,相比下面那種有什麼優勢
你寫的這種應該叫做選擇排序,每次遍歷選出最大的那個放到最後面,跟冒泡排序有一定的區別,
選擇排序交換次數比冒泡排序較少,由於交換所需CPU時間比比較所需的CPU時間多,n值較小時,選擇排序比冒泡排序快。
原地操作幾乎是選擇排序的唯一優點,當方度(space complexity)要求較高時,可以考慮選擇排序;實際適用的場合非常罕見。