选择排序(Selection Sort) 的基本思想是:每次从当前待排 序的记录中选取关键字最小的记录表,然后与待排序的记 录序列中的第一个记录进行交换,直到整个记录序列有序 为止。


1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4
5 void swap(int *a,int *b)/*交换*/
6 {
7 int tmp;
8 tmp = *a;
9 *a = *b;
10 *b = tmp;
11 }
12
13 void print_array(int *a,int len)/*打印数组*/
14 {
15 int i;
16
17 for(i = 0;i < len;i++)
18 {
19 printf("%5d",a[i]);
20 }
21
22 printf("\n");
23
24 }
25
26 int select_min(int *a,int start,int end)/*选择最小值*/
27 {
28 int i;
29 int min = a[start];
30 int min_pos = start;
31
32 for(i = start;i < end;i++)
33 {
34 if(min > a[i])
35 {
36 min = a[i];
37 min_pos = i;
38 }
39 }
40
41 return min_pos;
42 }
43
44 void simple_select_sort(int *a,int n)/*简单的选择排序*/
45 {
46 int i = 0;
47 int min_pos;
48
49 for(i = 0;i < n;i++)
50 {
51 min_pos = select_min(a,i,n);
52 swap(a + i,a + min_pos);
53 }
54
55 }
56
57 int main()
58 {
59 int a[] = {11,7,9,3,2,5,6,4,1,20,99};
60
61 int len = sizeof(a) / sizeof(a[0]);
62
63 print_array(a,len);
64 printf("\n");
65 simple_select_sort(a,len);
66
67 print_array(a,len);
68
69 return 0;
70
71 }










40 i++;
41 }
42
43 if(root_value >= v[i])
44 {
45 break;
46 }else
47 {
48 v[parent] = v[i];
49 parent = i;
50 }
51 }
52
53 v[parent] = root_value;
54 }
55
56 void heap_sort(int v[],int len)
57 {
58 int i;
59
60 for(i = len / 2 - 1;i >= 0;i--)/*1.构建大根堆*/
61 {
62 adjust_heap(v,i,len);
63 }
64
65 for(i = len - 1;i > 0;i--)/*2.调整堆结构,交换栈顶元素与末尾元素*/
66 {
67 swap(v,v + i);
68
69 adjust_heap(v,0,i);/*调整堆栈*/
70 }
71 }
72
73 int main()
74 {
75 int a[] = {11,7,9,3,2,5,6,4,1,20,99};
76
77 int len = sizeof(a) / sizeof(a[0]);
78
79 print_array(a,len);
80 printf("\n");
81 heap_sort(a,len);
82
83 print_array(a,len);
84
85 return 0;
86
87 }
结果相同