一、氣泡排序
已知一組無序資料a[1]、a[2]、……a[n],需將其按公升序排列。首先比較a[1]與a[2]的值,若a[1]大於a[2]則交換兩者的值,否則不變。再比較a[2]與a[3]的值,若a[2]大於a[3]則交換兩者的值,否則不變。再比較a[3]與a[4],以此類推,最後比較a[n-1]與a[n]的值。這樣處理一輪後,a[n]的值一定是這組資料中最大的。再對a[1]~a[n-1]以相同方法處理一輪,則a[n-1]的值一定是a[1]~a[n-1]中最大的。再對a[1]~a[n-2]以相同方法處理一輪,以此類推。共處理n-1輪後a[1]、a[2]、……a[n]就以公升序排列了。
優點:穩定;
缺點:慢,每次只能移動相鄰兩個資料。
二、選擇排序
氣泡排序的改進版。
每一趟從待排序的資料元素中選出最小(或最大)的乙個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。
選擇排序是不穩定的排序方法。
n個記錄的檔案的直接選擇排序可經過n-1趟直接選擇排序得到有序結果:
①初始狀態:無序區為r[1..n],有序區為空。
②第1趟排序
在無序區r[1..n]中選出關鍵字最小的記錄r[k],將它與無序區的第1個記錄r[1]交換,使r[1..1]和r[2..n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
…… ③第i趟排序
第i趟排序開始時,當前有序區和無序區分別為r[1..i-1]和r(1≤i≤n-1)。該趟排序從當前無序區中選出關鍵字最小的記錄
r[k],將它與無序區的第1個記錄r交換,使r[1..i]和r分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
這樣,n個記錄的檔案的直接選擇排序可經過n-1趟直接選擇排序得到有序結果。
優點:移動資料的次數已知(n-1次);
缺點:比較次數多。
三、插入排序
已知一組公升序排列資料a[1]、a[2]、……a[n],一組無序資料b[1]、b[2]、……b[m],需將二者合併成乙個公升序數列。首先比較b[1]與a[1]的值,若b[1]大於a[1],則跳過,比較b[1]與a[2]的值,若b[1]仍然大於a[2],則繼續跳過,直到b[1]小於a陣列中某一資料a[x],則將a[x]~a[n]分別向後移動一位,將b[1]插入到原來a[x]的位置這就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若無陣列a,可將b[1]當作n=1的陣列a)
優點:穩定,快;
缺點:比較次數不一定,比較次數越少,插入點後的資料移動越多,特別是當資料總量龐大的時候,但用鍊錶可以解決這個問題。
三、縮小增量排序
由希爾在2023年提出,又稱希爾排序(shell排序)。
已知一組無序資料a[1]、a[2]、……a[n],需將其按公升序排列。發現當n不大時,插入排序的效果很好。首先取一增量d(d
優點:快,資料移動少;
缺點:不穩定,d的取值是多少,應取多少個不同的值,都無法確切知道,只能憑經驗來取。
四、快速排序
快速排序是目前已知的最快的排序方法。
已知一組無序資料a[1]、a[2]、……a[n],需將其按公升序排列。首先任取資料a[x]作為基準。比較a[x]與其它資料並排序,使a[x]排在資料的第k位,並且使a[1]~a[k-1]中的每乙個資料
優點:極快,資料移動少;
缺點:不穩定。
五、箱排序
已知一組無序正整數資料a[1]、a[2]、……a[n],需將其按公升序排列。首先定義乙個陣列x[m],且m>=a[1]、a[2]、……a[n],接著迴圈n次,每次x[a]++.
優點:快,效率達到o(1)
缺點:資料範圍必須為正整數並且比較小
六、歸併排序
歸併排序是多次將兩個或兩個以上的有序表合併成乙個新的有序表。最簡單的歸併是直接將兩個有序的子表合併成乙個有序的表。
歸併排序是穩定的排序.即相等的元素的順序不會改變.如輸入記錄 1(1) 3(2) 2(3) 2(4) 5(5) (括號中是記錄的關鍵字)時輸出的
1(1) 2(3) 2(4) 3(2) 5(5) 中的2 和 2
是按輸入的順序.這對要排序資料報含多個資訊而要按其中的某乙個資訊排序,要求其它資訊盡量按輸入的順序排列時很重要.這也是它比快速排序優勢的地方.
排序演算法優劣
對n較大的排序記錄。一般的選擇都是時間複雜度為o nlog2n 的排序方法。時間複雜度來說 1 平方階 o n2 排序 各類簡單排序 直接插入 直接選擇和氣泡排序 2 線性對數階 o nlog2n 排序 快速排序 堆排序和歸併排序 3 o n1 排序,是介於0和1之間的常數。希爾排序 4 線性階 o...
排序演算法優劣
對n較大的排序記錄。一般的選擇都是時間複雜度為o nlog2n 的排序方法。時間複雜度來說 1 平方階 o n2 排序 各類簡單排序 直接插入 直接選擇和氣泡排序 2 線性對數階 o nlog2n 排序 快速排序 堆排序和歸併排序 3 o n1 排序,是介於0和1之間的常數。希爾排序 4 線性階 o...
排序演算法優劣
對n較大的排序記錄。一般的選擇都是時間複雜度為o nlog2n 的排序方法。時間複雜度來說 1 平方階 o n2 排序 各類簡單排序 直接插入 直接選擇和氣泡排序 2 線性對數階 o nlog2n 排序 快速排序 堆排序和歸併排序 3 o n1 排序,是介於0和1之間的常數。希爾排序 4 線性階 o...