插入排序(Insertion Sort)
插入排序就像是打撲克牌時,整理牌組的順序
插入排序演示

插入排序參考程式碼

希爾排序 (Shell Sort)
希爾排序法⼜稱縮⼩增量法
希爾排序法的基本思想是:先選定⼀個整數(通常是gap = n/3+1),把待排序數據所有記錄分成各組,所有的距離相等的記錄分在同⼀組內,並對每⼀組內的記錄進⾏排序,然後gap=gap/3+1得到下⼀個整數,再將數組分成各組,進⾏插⼊排序,當gap=1時,就相當於直接插⼊排序
希爾排序其實就是在直接插入排序的基礎上優化而來
希爾排序參考程式碼

選擇排序(Selection Sort)
選擇排序演示

選擇排序參考程式碼

泡沫排序(Bubble Sort)
假設目前有n個待排序的數據,冒泡排序則會進行n輪次的交換,每次交換完畢後都能讓當前輪次的最大值都能到期正確的位置
泡沫排序演示

泡沫排序參考程式碼

- exchange 是判斷當前輪次是否有做過交換,如果沒做過交換,就代表當前數據已經完成排序。
- 因爲每輪都是兩兩比較,如果當前數據不是已經完成排序的情況,那必然會有交換發生。
快速排序(Quick Sort)
快速排序演示

這裡的上下區分是遞迴的深度演示
快速排序程式碼演示
遞迴方法(三種)

// 快速排序 int Quick_Sort_logic(vector<int>&a,int left,int right){ int hole = left; // 坑的位置 int pivot_Val = a[left]; while(left < right){ // 從右邊找值來填坑 while(left < right && a[right] >= pivot_Val){ --right; } a[hole] = a[right]; // Update 坑的值 hole = right; // Update 坑的位置 while(left < right && a[left] <= pivot_Val){ ++left; } a[hole] = a[left]; hole = left; } // 這裡結束後會準確地讓pivot_Val左邊都是小於pivot_val 反之右邊都是大於 // 再來將pivot_Val 填回去他應該在的位置 a[hole] = pivot_Val; return hole; } void Quick_Sort(vector<int>&a,int left,int right){ if(left >= right){ return; } int mid = Quick_Sort_logic(a,left,right); // 先排一輪 Quick_Sort(a,left,mid); Quick_Sort(a,mid+1,right); }
非遞迴方法

堆排序(Heap Sort)
堆排序的核心概念為堆!堆排序就是先建好小堆後,然後再搭配堆刪除數據來完成
堆排序參考程式碼

歸併排序(Merge Sort)
歸併排序的核心思想是分治思想,將大問題拆解成小問題來解決
歸併排序演示

歸併排序參考程式碼

計數排序
計數排序演示

計數排序參考程式碼

效率、穩定性比較
