1 /*
2 * FILE: p198_sort.c
3 * DATE: 20180114
4 * --------------
5 */
6
7 #include <stdio.h>
8
9 /* 从小到大 排序 */
10 void insert_sort_min(int *array, int length);
11 void bubble_sort(int *array, int length);
12 void select_sort(int *array, int length);
13
14 void print(const int *array, const int length);
15
16 #define swap(a, b) do{ \
17 (a) = (a) ^ (b); \
18 (b) = (b) ^ (a); \
19 (a) = (a) ^ (b); \
20 }while(0)
21
22 int main(int argc, char *argv[])
23 {
24 int a[] = {5,2,7,4,9,1,2,0};
25 int len = sizeof(a) / sizeof(a[0]);
26 print(a, len);
27 insert_sort_min(a, len);
28 print(a, len);
29 bubble_sort(a, len);
30 print(a, len);
31 select_sort(a, len);
32 print(a, len);
33 return 0;
34 }
35
36 /* 直接插入排序 straight insertion sort */
37 /* 若当前数 比前一个数更小,有元素都向后移一位
38 * 再将当前数 插入至它应在的位置
39 * 当前数的前面 已经排好序 */
40 void insert_sort_min(int *array, int length)
41 {
42 int i;
43 for(i=1; i<length; i++)
44 {
45 int j = i;
46 int temp = array[i];
47 // 小心:是temp<array[j-1];而不是a[j]
48 // 若需从大到小 则temp>array[j-1]
49 while((j>0) && (temp < array[j-1]))
50 {
51 array[j] = array[j-1];
52 j--;
53 }
54 array[j] = temp;
55 }
56 }
57
58 /* 冒泡排序 bubble sort */
59 /* 相邻的两两比较 */
60 void bubble_sort(int *array, int length)
61 {
62 int i, j;
63 for(i=0; i<length-1; i++)
64 for(j=1; j<length-i; j++)
65 {
66 // 若需从大到小,则a[j]>a[j-1]
67 if(array[j] > array[j-1])
68 swap(array[j], array[j-1]);
69 }
70 }
71
72 /* 简单选择排序 simple selection sort */
73 /* 当前元素 与其后的所有元素比较 */
74 void select_sort(int *array, int length)
75 {
76 int i, j;
77 for(i=0; i<length-1; i++)
78 for(j=i+1; j<length; j++)
79 {
80 // 若需从大到小,则a[j]>a[i]
81 if(array[j] < array[i])
82 swap(array[j], array[i]);
83 }
84 }
85
86 void print(const int *array, const int length)
87 {
88 int i;
89 for(i=0; i<length; i++)
90 printf("%d ", array[i]);
91 printf("\n");
92 }
(C语言)八大排序之:插入排序、冒泡排序、选择排序
最新推荐文章于 2024-06-08 11:48:45 发布