在没看课本之前,尝试着按照自己的理解写出我所任务的快速排序法。结果基本跟书上的一样。就是平白的多了好多次交换。
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(" "); 29 } 30 31 int main() 32 { 33 int a[10] = {3, 1, 5, 2, 7, 8, 9, 4, 6, 0}; 34 printf("before sort: "); 35 print(a, 10); 36 SelectSort(a, 10); 37 printf("sort after: "); 38 print(a, 10); 39 return 0; 40 }
选择排序就是每趟选择一个最小的数,然后跟前面的数交换。而我自己做的是只要发现比第一个数小的就交换,浪费了些资源。
选择排序的时间复杂度O(n^2)