標籤:基數排序 讀取 ges 第一個 二分插入排序 info 位置 數組 數列
圖片鎮樓
插入排序(InsertSort)
步驟:
1.依次選擇一個待排序的記錄,
2.依次與已經排好序的有序序列比較,並插入
3.持續每次對越來越少的元素重複上面的步驟,直到插完所有元素為。
改進:
二分插入排序,直接和有序序列的中間比較。
希爾排序。
希爾排序(又叫縮小增量排序,ShellSort)
步驟:
1.先將整個待排元素序列分割成若干個子序列
2.分別進行插入排序
3.然後依次縮減增量再進行插入排序
4.待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次插入排序
冒泡排序(BubbleSort)
步驟:
1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3.針對所有的元素重複以上的步驟,除了最後一個。
4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
改進:
快速排序。
快速排序(QuickSort)
步驟:
1.從數列中挑出一個元素,稱為 "基準",重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。
2.遞迴地把小於基準值元素的子數列和大於基準值元素的子數列排序。
3.遞迴的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。
選擇排序(SelectSort)
步驟:
1.在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
2.從剩餘未排序元素中繼續尋找最小(大)元素
3.放到已排序序列的末尾
4.以此類推,直到所有元素均排序完畢。
改進:
傳統的簡單選擇排序,每趟迴圈只能確定一個元素排序後的定位。我們可以考慮改進為每趟迴圈確定兩個元素(當前趟最大和最小記錄)的位置,從而減少排序所需的迴圈次數。改進後對n個資料進行排序,最多隻需進行[n/2]趟迴圈即可。
堆排序。
堆排序(HeapSort)
步驟:
1.將無需序列構建成一個堆,根據升序降序需求選擇大頂堆或小頂堆;
2.將堆頂元素與末尾元素交換,將最大元素"沉"到數組末端;
3.重新調整結構,使其滿足堆定義,然後繼續交換堆頂元素與當前末尾元素,反覆執行調整+交換步驟,直到整個序列有序
歸併排序(MergeSort)
步驟:
1. 把長度為n的輸入序列分成兩個長度為n/2的子序列。
2. 對這兩個子序列分別採用歸併排序。
3. 將兩個排序好的子序列遞迴合并成一個最終的排序序列。
桶排序(Bucket Sort)
步驟:
1. 建立等容量的桶數組,並將桶數組元素都初始化為0
2. 逐個遍曆數組,將數組的值,作為桶數組的下標。資料被讀取時,就將桶的值加1。
3. 將桶數組不為0的的值的key取出,數量為該key的值
改進:
基數排序。計數排序
基數排序(Radix Sort)
步驟:
1. 將所有待比較數值統一為同樣的數位長度,數位較短的數前面補零。
2. 從最低位開始,依次進行一次排序。
計數排序(count sort)
步驟:
- 找出序列中最大值和最小值,開闢Max-Min+1的輔助空間
- 最小的數對應下標為0的位置,遇到一個數就給對應下標處的值+1,。
- 遍曆一遍輔助空間,就可以得到有序的一組序列
排序演算法對比,步驟,改進