常用排序算法
Posted mrlayfolk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用排序算法相关的知识,希望对你有一定的参考价值。
简述一些常用算法,并用代码实现它。
注:动图是在网上找的。
(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)其它算法
后续补充
以上是关于常用排序算法的主要内容,如果未能解决你的问题,请参考以下文章