【C语言】冒泡排序,选择排序,快速排序
2015-05-12 17:23
417 查看
一、冒泡(Bubble)排序
冒泡排序(BubbleSort)的基本思想是:依次比较相邻的两个数,将小数放在前面,大数放在后面。如此重复下去,直至最终完成排序。
时间复杂度为O(n*n),适用于排序小列表。
代码:
二、选择排序
选择排序的基本思想是:每一趟从待排序的数据元素中选出最小的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
时间复杂度为O(n*n),适用于排序小列表。
代码:
三、快速排序
快速排序(Quicksort)是对冒泡排序的一种改进,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序
过程可以递归进行,以此达到整个数据变成有序序列。
时间复杂度为O(nlog2n),适用于排序大列表。
代码:
冒泡排序(BubbleSort)的基本思想是:依次比较相邻的两个数,将小数放在前面,大数放在后面。如此重复下去,直至最终完成排序。
时间复杂度为O(n*n),适用于排序小列表。
代码:
#include <stdio.h> void main() { int i, j, t, a[11]; printf("请输入10个数:\n"); for (i = 1; i < 11; i++) scanf("%d", &a[i]); for (i = 1; i < 10; i++) for (j = 1; j < 11-i; j++) if (a[j] > a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } printf("排序后的顺序是:\n"); for (i = 1; i <= 10; i++) printf("%5d", a[i]); printf("\n"); }
二、选择排序
选择排序的基本思想是:每一趟从待排序的数据元素中选出最小的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
时间复杂度为O(n*n),适用于排序小列表。
代码:
#include<stdio.h> void main() { int i, j, t, a[11]; printf("请输入10个数:\n"); for (i = 1; i < 11; i++) scanf("%d", &a[i]); for (i = 1; i <= 9; i++) for (j = i + 1; j <= 10; j++) if (a[i] > a[j]) { t = a[i]; a[i] = a[j]; a[j] = t; } printf("排序后的顺序是:\n"); for (i = 1; i <= 10; i++) printf("%5d", a[i]); printf("\n"); }
三、快速排序
快速排序(Quicksort)是对冒泡排序的一种改进,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序
过程可以递归进行,以此达到整个数据变成有序序列。
时间复杂度为O(nlog2n),适用于排序大列表。
代码:
#include <stdio.h> void qusort(int s[], int start, int end) /*自定义函数qusort()*/ { int i, j; /*定义变量为基本整型*/ i = start; /*将每组首个元素赋给i*/ j = end; /*将每组末尾元素赋给j*/ s[0] = s[start]; /*设置基准值*/ while (i < j) { while (i < j && s[0] < s[j]) j--; /*位置左移*/ if (i < j) { s[i] = s[j]; /*将s[j]放到s[i]的位置上*/ i++; /*位置右移*/ } while (i < j && s[i] <= s[0]) i++; /*位置右移*/ if (i < j) { s[j] = s[i]; /*将大于基准值的s[j]放到s[i]位置*/ j--; /*位置右移*/ } } s[i] = s[0]; /*将基准值放入指定位置*/ if (start < i) qusort(s, start, j - 1); /*对分割出的部分递归调用函数qusort()*/ if (i < end) qusort(s, j + 1, end); } void main() { int a[11], i; /*定义数组及变量为基本整型*/ printf("请输入10个数:\n"); for (i = 1; i <= 10; i++) scanf("%d", &a[i]); /*从键盘中输入10个要进行排序的数*/ qusort(a, 1, 10); /*调用qusort()函数进行排序*/ printf("排序后的顺序是:\n"); for (i = 1; i <= 10; i++) printf("%5d", a[i]); /*输出排好序的数组*/ printf("\n"); }
相关文章推荐
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- 用c语言实现冒泡排序,选择排序,快速排序
- C语言常用的几种排序算法代码(选择排序,冒泡排序,插入排序,快速排序)
- OutMan——C语言中的冒泡排序、选择排序、折半查找以及指针的介绍
- c语言中冒泡排序、插入排序、选择排序算法比较
- java实现冒泡排序,选择排序,插入排序,快速排序(简洁版)及性能测试
- 简单的排序算法——插入排序,选择排序,交换排序(冒泡排序,快速排序)
- 漫步IOS--部分排序一:冒泡排序、选择排序和快速排序
- java实现冒泡排序,插入排序,选择排序,快速排序
- C语言 冒泡排序 快速排序 直接插入排序 选择排序
- 易混的排序算法:冒泡排序、选择排序、快速排序
- Java排序算法(冒泡排序、选择排序、插入排序、反数组排序、快速排序)例子
- c语言中冒泡排序、插入排序、选择排序算法比较
- 冒泡排序与选择排序的不同、快速排序与选择排序的结合
- Kotlin练习 之使用Kotlin实现:二分查找,选择排序,冒泡排序,快速排序
- 冒泡排序,选择排序,插入排序,堆排序,归并排序,快速排序
- 数据结构——选择排序、插入排序、冒泡排序、快速排序
- h5局部变量、全局变量、数组、选择排序(快速排序)、冒泡排序