选择排序

参考:

  《linux c编程一站式学习》的习题11.1

思想:

  第一次从数组a[0,...,LEN-1]中找出最小元素交换到a[0]的位置,第二次从数组a[1,...,LEN-1]中找出最小元素交换到a[1]的位置,依次类推。

code:

 1 #include <stdio.h>
 2 
 3 #define LEN 5
 4 
 5 int testData[LEN] = {10, 5, 2, 4, 7};
 6 
 7 void swap(int *a, int *b)
 8 {//交换
 9     int temp;
10     temp = *a;
11     *a = *b;
12     *b = temp;
13 }
14 
15 void select_sort(void)
16 {//从小到大排序,下标0的位置保存最小值
17     int i, j;
18     int min_val;  //保存最小值
19     int min_num;  //保存最小值的下标
20     for(i=0; i<LEN-1; i++){
21         printf("%d, %d, %d, %d, %d\n", testData[0], testData[1], testData[2], testData[3], testData[4]);
22         min_val = testData[i];
23         min_num = i;
24         for(j=i+1; j<LEN; j++){ //求取剩余数字的最小值
25             if(min_val > testData[j]){
26                 min_val = testData[j];
27                 min_num = j;
28             }
29         }
30         if(min_num != i){//最小值不在当前位置,需要交换
31             swap(&testData[i], &testData[min_num]);
32         }
33     }
34     printf("%d, %d, %d, %d, %d\n", testData[0], testData[1], testData[2], testData[3], testData[4]);
35 }
36 
37 int main(int argc, char *argv[])
38 {
39     select_sort();
40     return 0;
41 }

截图:

选择排序