幾種排序算法的總結算法
最近複習了一下數據結構,下面把幾種排序算法總結一下。數組
一、直接插入排序數據結構
插入排序相似於咱們平時打撲克時給撲克排序。好比要插入第i個元素,第1個到第i-1個元素已經排序好了,那就將第i個元素與第i-1個,i-2個......進行比較,選在適當的地方插入,而後將後面的數依次後移。ide
如下是代碼實現:ui
假定要對v[length-1]中的數組進行排序。spa
- for(int i = 0; i < length; i++){
- key = v[i];
- for(int j = i - 1; j >= 0 && v[j] > key; j --)
- v[j+1] = v[j];
- v[j] = key;
- }
二、折半插入排序。排序
折半插入排序就是利用二分搜索法進行尋找v[i]的位置,而後插入相應位置。it
如下是代碼實現:io
- int low = 0, high = length-1;
- for(int j = 0; j < length; j++){
- for(int i = low; i <= high && low < high; i++){
- middle = (low + high)/2;
- if(v[j] < v[middle])
- high = middle - 1;
- else
- low = middle + 1;
- }
- for(int m = length-1; m > low; m--)
- v[m+1] = v[m];
- v[m] = v[j];
- }
三、快速排序class
快速排序的核心思想是隨機選擇一個基準量,而後將全部的數分紅兩個子序列,小於基準量的爲一個子序列,非小於基準量的爲另一個子序列。而後再分別對子序列進行重複以上的操做。直到全部的數都排到了相應的位置上。
如下是代碼實現:
- void quickSort(Vector v, int left, int right){
- if(left < right){
- int standardpos = v.partition(left,right);
- quickSort(V,left,standardpos - 1);
- quickSort(standardpos + 1, right);
- }
- }
- int paritition(int left, int right){
- standardpos = left;
- key = v[left];
- for(i = left; i <= right; i ++){
- if(v[i] < standard){
- standardpos ++;
- swap(v[standardpos],v[i]);
- }
- }
- v[left] = v[standardpos];
- v[standardpos] = key;
- }
四、 選擇排序
選擇排序就是依次選取最小的值放在相應的位置。
如下是相應的代碼實現:
- for(int i = 0; i < length; i++){
- k = i;
- for(int j = i+1; j < length; j++){
- if(v[j] < v[k]) k = j;
- }
- if(i != k) swap(v[i],v[k]);
- }