1. 程式人生 > >礎演算法--排序: 之選擇排序

礎演算法--排序: 之選擇排序

三種簡單排序的區別:

     氣泡排序是 未排序部分,相鄰元素之間兩兩比較移動,從而找出最值。

     插入排序是 某個待排序元素與以排元素兩兩比較,   從而找到待排元素所應在的位置

     選擇排序是 在未排部分,一次遍歷找到最大值,然後將其置於未排部分的末尾位置。

 

     選擇排序、氣泡排序,都是遍歷未排序部分, 所不同的是:

     選擇排序,遍歷時,不進行移動,而是標記出最大值所在的索引

     而氣泡排序,遍歷時,兩兩比較,移動頻繁。

     因此,選擇排序的效率要高於氣泡排序。

 

 

     以下是摘自網路上的圖示:

 

  

 

  

   各種排序演算法實現的關鍵:

     在設計各個具體演算法程式碼時, 關鍵之處是弄清楚 哪些元素是未排的,哪些元素是已經排好的。

     即分清: 未排元素 與 以排元素的分界線

 

   程式程式碼:

 

[cpp] view plaincopy

  1. void StraightSelectionSort(int *p, int n)  
  2. {  
  3.     int i,j,t;  
  4.     int indexMax;  
  5.   
  6.     for (i=0;i<n;i++)  // 0....n-1  
  7.     {  
  8.         // 未排元素 0...n-1-i   以排元素 n-i...n-1  
  9.         for (j=0,indexMax=0;j<n-i;j++)  
  10.         {  
  11.             if (p[j]>=p[indexMax])  
  12.             {  
  13.                 indexMax=j;  
  14.             }  
  15.         }  
  16.   
  17.         t=p[n-i-1];  
  18.         p[n-i-1]=p[indexMax];  
  19.         p[indexMax]=t;  
  20.     }  
  21. }