选择排序法

在没看课本之前,尝试着按照自己的理解写出我所任务的快速排序法。结果基本跟书上的一样。就是平白的多了好多次交换。

 1 #include <stdio.h>
 2 
 3 void SelectSort(int r[], int n)
 4 {
 5     int i, j, k, temp;
 6     for(i = 0; i < n - 1; i++)
 7     {
 8         k = i;
 9         for(j = i+1; j < n; j++)
10         {
11             if(r[j] < r[k])
12                 k = j;
13         }
14         if(i != k) // 避免当a[i] 与 a[k]相等时多一次交换
15         {
16             temp = r[i];
17             r[i] = r[k];
18             r[k] = temp;
19         }
20     }
21 }
22 
23 void print(int r[], int n)
24 {
25     int i;
26     for(i = 0; i < n; i++)
27         printf("%d ", r[i]);
28     puts("\n");
29 }
30 
31 int main()
32 {
33     int a[10] = {3, 1, 5, 2, 7, 8, 9, 4, 6, 0};
34     printf("before sort:\n");
35     print(a, 10);
36     SelectSort(a, 10);
37     printf("sort after:\n");
38     print(a, 10);
39     return 0;
40 }

选择排序就是每趟选择一个最小的数,然后跟前面的数交换。而我自己做的是只要发现比第一个数小的就交换,浪费了些资源。

 

选择排序的时间复杂度O(n^2)

posted @ 2017-07-27 21:12  大波非猫  阅读(193)  评论(0编辑  收藏  举报