首页 > 编程语言 > 详细

常用排序算法

时间:2020-06-30 00:16:07      阅读:101      评论:0      收藏:0      [点我收藏+]

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

注:动图是在网上找的。

(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\t", a[i]);
22     }
23     printf("\n");
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\t", a[i]);
23     }
24     printf("\n");
25 }

运行结果:

5       4       3       2       1

(3)其它算法

后续补充

常用排序算法

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!