幾種排序算法的總結

幾種排序算法的總結

    最近複習了一下數據結構,下面把幾種排序算法總結一下。

   1、直接插入排序

      插入排序類似於我們平時打撲克時給撲克排序。比如要插入第i個元素,第1個到第i-1個元素已經排序好了,那就將第i個元素與第i-1個,i-2個......進行比較,選在適當的地方插入,然後將後面的數依次後移。

     以下是代碼實現:

    假定要對v[length-1]中的數組進行排序。

 

  1. for(int i = 0; i < length; i++){ 
  2.   key = v[i]; 
  3.   for(int j = i - 1; j >= 0 && v[j] > key; j --) 
  4.        v[j+1] = v[j]; 
  5.   v[j] = key; 

 

2、折半插入排序。

    折半插入排序就是利用二分搜索法進行尋找v[i]的位置,然後插入相應位置。

  以下是代碼實現:

 

  1. int low = 0, high = length-1; 
  2. for(int j = 0; j < length; j++){ 
  3.   for(int i = low; i <= high && low < high; i++){ 
  4.     middle = (low + high)/2; 
  5.     if(v[j] < v[middle]) 
  6.       high = middle - 1; 
  7.     else 
  8.       low = middle + 1; 
  9.   } 
  10.   for(int m = length-1; m > low; m--) 
  11.     v[m+1] = v[m]; 
  12.    v[m] = v[j]; 

 

3、快速排序

    快速排序的核心思想是隨機選擇一個基準量,然後將所有的數分成兩個子序列,小於基準量的爲一個子序列,非小於基準量的爲另外一個子序列。然後再分別對子序列進行重複以上的操作。直到所有的數都排到了相應的位置上。

    以下是代碼實現:

 

  1. void quickSort(Vector v, int left, int right){ 
  2.   if(left < right){ 
  3.     int standardpos = v.partition(left,right); 
  4.     quickSort(V,left,standardpos - 1); 
  5.     quickSort(standardpos + 1, right); 
  6.   } 
  7.  
  8. int paritition(int left, int right){ 
  9.   standardpos = left; 
  10.   key = v[left]; 
  11.   for(i = left; i <= right; i ++){ 
  12.      if(v[i] < standard){
  13. standardpos ++;
  14. swap(v[standardpos],v[i]);
  15. }
  16.   }
  17. v[left] = v[standardpos];
  18. v[standardpos] = key;
  19.  

 

4、 選擇排序

    選擇排序就是依次選取最小的值放在相應的位置。

  以下是相應的代碼實現:

 

  1. for(int i = 0; i < length; i++){ 
  2.   k = i;   
  3.   for(int j = i+1; j < length; j++){ 
  4.     if(v[j] < v[k]) k = j; 
  5.   } 
  6.   if(i != k) swap(v[i],v[k]); 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章