C语言选择排序详解及其实现

选择排序(Selection sort)是一种简单直观的排序算法。这次我们依然将其分为有序组与无序组。

(推荐其他两种排序算法 

冒泡排序:http://blog.****.net/llzk_/article/details/51547923

插入排序:http://blog.****.net/llzk_/article/details/51628574

它的工作原理是每一次从无序组的数据元素中选出最小(或最大)的一个元素,存放在无序组的起始位置,无序组元素减少,有序组元素增加,直到全部待排序的数据元素排完。


升序为例的图解:


C语言选择排序详解及其实现



 

代码:

[cpp] view plain copy
  1. #include<stdio.h>  
  2. void SelectionSort(int *num,int n)  
  3. {  
  4.  int i = 0;  
  5.  int min = 0;  
  6.  int j = 0;  
  7.  int tmp = 0;  
  8.  for(i = 0;i < n-1;i++)  
  9.  {  
  10.     min = i;//每次讲min置成无序组起始位置元素下标   
  11.     for(j = i;j < n;j++)//遍历无序组,找到最小元素。   
  12.     {  
  13.       if(num[min]>num[j])  
  14.       {  
  15.        min = j;  
  16.       }  
  17.     }  
  18.     if(min != i)//如果最小元素不是无序组起始位置元素,则与起始元素交换位置   
  19.     {  
  20.       tmp = num[min];  
  21.       num[min] = num[i];  
  22.       num[i] = tmp;  
  23.     }  
  24.  }  
  25. }  
  26.   
  27. int main()  
  28. {  
  29.  int num[6] = {5,4,3,2,9,1};  
  30.  int i = 0;  
  31.  SelectionSort(num,6);//这里需要将数列元素个数传入。有心者可用sizeof在函数内求得元素个数。   
  32.  for(i = 0;i < 6;i++)  
  33.  {  
  34.    printf("%d ",num[i]);  
  35.  }  
  36.  return 0;  
  37. }