基礎排序算法 – 選擇排序Selection sort

直接從待排序數組裏選擇一個最小(或最大)的數字,每次都拿一個最小數字出來,

順序放入新數組,直到全部拿完

再簡單點,對着一羣數組說,你們誰最小出列,站到最後邊

然後繼續對剩餘的無序數組說,你們誰最小出列,站到最後邊

再繼續剛纔的操作,一直到最後一個,繼續站到最後邊,現在數組有序了,從小到大

舉例

先說看每步的狀態變化,後邊介紹細節。

現有無序數組[6 2 4 1 5 9]

第一趟找到最小數1,放到最前邊(與首位數字交換)

交換前:| 6 | 2 | 4 | 1 | 5 | 9 |

交換後:| 1 | 2 | 4 | 6 | 5 | 9 |

第二趟找到餘下數字[2 4 6 5 9]裏的最小數2,與當前數組的首位數字進行交換,實際沒有交換,本來就在首位

交換前:| 1 | 2 | 4 | 6 | 5 | 9 |

交換後:| 1 | 2 | 4 | 6 | 5 | 9 |

第三趟繼續找到剩餘[4 6 5 9]數字裏的最小數4,實際沒有交換,4待首位置無須交換

第四趟從剩餘的[6 5 9]裏找到最小數5,與首位數字6交換位置

交換前:| 1 | 2 | 4 | 6 | 5 | 9 |

交換後:| 1 | 2 | 4 | 5 | 6 | 9 |

第五趟從剩餘的[6 9]裏找到最小數6,發現它待在正確的位置,沒有交換

排序完畢輸出正確結果[1 2 4 5 6 9]

第一趟找到最小數1的細節

當前數組是| 6 | 2 | 4 | 1 | 5 | 9 |

先把6取出來,讓它扮演最小數

當前最小數6與其它數一一進行比較,發現更小數就交換角色

當前最小數6與2比較,發現更小數,交換角色,此時最小數是2,接下來2與剩餘數字比較

當前最小數2與4比較,不動

當前最小數2與1比較,發現更小數,交換角色,此時最小數是1,接下來1與剩餘數字比較

當前最小數1與5比較,不動

當前最小數1與9比較,不動,到達末尾

當前最小數1與當前首位數字進行位置交換,如下所示

交換前:| 6 | 2 | 4 | 1 | 5 | 9 |

交換後:| 1 | 2 | 4 | 6 | 5 | 9 |

完成一趟排序,其餘步驟類似

C語言代碼:

  1. #include <stdio.h> 
  2. int main() 
  3.     int a[5]={5,4,3,2,1},i; 
  4.   
  5.     printf("原本的數字爲:"); 
  6.      for(i=0;i<5;i++) 
  7.     { 
  8.         printf("%d ",a[i]); 
  9.     } 
  10.     printf("\n"); 
  11.   
  12.     void choose (int a[],int n); 
  13.     choose (a,5); 
  14.   
  15.     printf("選擇法排序後:"); 
  16.     for(i=0;i<5;i++) 
  17.     { 
  18.         printf("%d ",a[i]); 
  19.     } 
  20.     return 0; 
  21.   
  22. //選擇法 
  23. void choose (int a[],int n) 
  24.     int i,j,k,temp; 
  25.     for(i=0;i<n-1;i++) 
  26.     { 
  27.         k=i;//給記號賦值 
  28.         for(j=i+1;j<n;j++) 
  29.         { 
  30.             if (a[k]>a[j]); 
  31.             { 
  32.             k=j;//使k總是指向最小元素 
  33.             } 
  34.             if (i!=k)//當k!=i時才交換 
  35.             { 
  36.                 temp=a[i]; 
  37.                 a[i]=a[k]; 
  38.                 a[k]=temp; 
  39.             } 
  40.         } 
  41.     } 

引用:http://www.cnblogs.com/kkun/archive/2011/11/23/2260281.html

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