常用排序算法

简述一些常用算法,并用代码实现它。

注:动图是在网上找的。

(1)冒泡排序

核心思想:交换序列中相邻两个整数。

 测试代码:

 1 void bubble_sort(void)
 2 {
 3     /*
 4     * 冒泡排序:以降序为例进行说明
 5     * 比较相邻的元素,将值最小的元素交换到右边。
 6     */
 7     int a[] = {3, 4, 1, 5, 2};
 8     int i = 0, j = 0;
 9     int tmp;
10 
11     for (i = 0; i < sizeof(a)/sizeof(int); i++) {
12         for (j = 0; j < sizeof(a)/sizeof(int) - i; j++) {
13             if (a[j] < a[j+1]) {
14                 tmp = a[j];
15                 a[j] = a[j+1];
16                 a[j+1] = tmp;
17             }
18         }
19     }
20     for (i = 0; i < sizeof(a)/sizeof(int); i++) {
21         printf("%d	", a[i]);
22     }
23     printf("
");
24 }

运行结果:

5       4       3       2       1

(2)选择排序

核心思想:每一趟在n-i+1 (i = 1,2,...,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。

测试代码:

 1 void select_sort(void)
 2 {
 3     /*
 4     * 选择排序:每一趟在n-i+1 (i = 1,2,...,n-1)个记录中
 5     * 选取关键字最小的记录作为有序序列中第i个记录。
 6     */
 7     int a[] = {3, 4, 1, 5, 2};
 8     int i = 0, j = 0;
 9     int tmp;
10 
11     for (i = 0; i < sizeof(a)/sizeof(int); i++) {
12         for (j = i+1; j < sizeof(a)/sizeof(int); j++) {
13             //每次选择出最大的数,并放到前面去
14             if (a[i] < a[j]) {
15                 tmp = a[i];
16                 a[i] = a[j];
17                 a[j] = tmp;
18             }
19         }
20     }
21     for (i = 0; i < sizeof(a)/sizeof(int); i++) {
22         printf("%d	", a[i]);
23     }
24     printf("
");
25 }

运行结果:

5       4       3       2       1

(3)其它算法

后续补充

原文地址:https://www.cnblogs.com/mrlayfolk/p/13211116.html