桶排序是將待排序的資料扔到按順序排列的桶裡,如下圖:
其中每個桶都有按順序的編號(桶就是陣列,編號是陣列的下標),將每個數放到編號與之對應的桶裡,然後再將桶裡的數依次拿出來便排號了序。缺點:如果需要對100、2、0進行排序,則需要建立乙個大小為101(下標從0開始,見上圖)的陣列,造成了嚴重的空間浪費。
時間複雜度:
對於n個待排資料,m個桶:
平均時間複雜度:o(n+n*logn-n*logm)
最好情況下的時間複雜度:o(n),當n=m時,即極限情況下每個桶只有乙個資料時。
如果相對於同樣的n,桶數量m越大,其效率越高,最好是o(n)。當然桶排序的空間複雜度為o(n+m),如果輸入資料非常龐大,而桶的數量也非常多,則空間代價無疑是昂貴的。此外,桶排序是穩定的。
示例**:
public class bucketsort ;
bucketsort(arr); }
static void bucketsort(int arr)
} //建立桶
int bucket = new int[max + 1];
//將資料放入桶
for (int i = 0; i < arr.length; i++)
//輸出桶裡的資料
for (int i = 0; i < bucket.length; i++)
} }}
氣泡排序是比較相鄰兩個元素的大小,將大的(或小的),向後移動。
例如,我們需要對3,6,4,2,4進行排序(由小到大),則氣泡排序過程如下:
第一次迴圈:
3,6,4,2,4 第一次比較:3和6比較,3小於6,不移動,結果:3,6,4,2,4
第二次比較:6和4比較,6大於4,將6後移,結果:3,4,6,2,4
第三次比較:6和2比較,6大於2,將6後移,結果:3,4,2,6,4
第四次比較:6和4比較,6大於4,將6後移,結果:3,4,2,4,6
第二次迴圈:
3,4,2,4,6 第一次比較:2和4比較,3小於4,不移動,結果:3,4,2,4,6
第二次比較:4和2比較,4大於2,將4後移,結果:3,2,4,4,6
第三次比較:4和4比較,4等於4,不移動,結果:3,2,4,4,6
第三次迴圈:
3,2,4,4,6 第一次比較:3和2比較,3大於2,將3後移,結果:2,3,4,4,6
第二次比較:3和4比較,3小於4,不移動,結果:2,3,4,4,6
第四次迴圈:
2,3,4,4,6 第一次比較:2和3比較,2小於3,不移動,結果:2,3,4,4,6
排序完畢。
之所以稱之為氣泡排序,是因為每次迴圈後都找出了最大(或最小)的元素向後移,就像水中的氣泡一樣,如圖:
看影象不像是冒泡呢?
時間複雜度(執行起來效率最低的):若待排序資料的初始狀態是正序的,一趟掃瞄即可完成排序。此時時間複雜度為
示例**:
public class bubblesort ;
bubblesort(arr); }
static void bubblesort(int arr)
}} for(int a : arr)
}}
選擇排序是每一次從待排序的資料中選出最大(或最小)的乙個元素,存放在未排序資料的後端(或前端)位置,直到全部待排序的資料元素排完。 其和氣泡排序類似,氣泡排序是兩兩比較交換,而此方法是先找出最大(或最小)值後再與序列的後端(或前端)進行交換,如圖(別說這個圖和氣泡排序的一樣哈,看第一次迴圈後的是不一樣的):
時間複雜度(優於氣泡排序):最好和最壞情況都是
示例**:
public class selectionsort ;
selesctionsort(arr); }
static void selesctionsort(int arr)
}//將最大元素放到每趟未排序元素的最後
temp = arr[arr.length - i - 1];
arr[arr.length - i - 1] = arr[maxindex];
arr[maxindex] = temp;
} for (int i = 0; i < arr.length; i++) }
}
經典排序演算法之氣泡排序
好記性不如爛筆頭。氣泡排序屬於交換排序,交換排序的基本思想是 兩兩比較待排序記錄的關鍵字,當兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。include using namespace std void printpro int input,int len void swap int fi...
經典排序演算法之 氣泡排序
int a 對於上面的乙個陣列,氣泡排序的原理是 依次比較相鄰元素的大小,前乙個元素若比後乙個元素大,則交換兩個元素的位置,給人的感覺是大的元素像氣泡一樣往上冒,也可以把小的元素往上冒。比較過程如下 最大值向上冒 陣列初始狀態 第一次比較後 5不比7大不交換位置 第二次比較後 7和3比較,交換位置 ...
排序演算法 經典排序演算法之氣泡排序
氣泡排序很經典了,有人比喻過像是排序演算法中的hello world,很貼切。演算法的基本思想是每次都需要兩兩比較大小。氣泡排序演算法的過程如下 從前往後 1 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。2 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應...