啊哈算法 之 快速排序
关于效率问题
上篇讲的冒泡排序可以说是我们第一个真正的算法,他解决了桶排序的占用空间过大的问题(因为桶排序要根据排序的数的个数申请指定的内存),但是冒泡排序却牺牲了非常大的效率,假设我们要给1亿的数进行排序,因为桶排序的时间复杂度是O(M+N),而冒泡的是O(N2)N的平方,假设计算机的速度是每秒10亿次,桶排序只需要0.1秒,而冒泡则需要1000万秒,大概115天,这是个很恐怖的数字, 想想都能吓尿人。
基准数
排序原理讲解
关于效率
实例
#include <stdio.h> int a[101],n; void quickSort(int left,int right){ //快速排序 int i,j,t,temp; if (left > right) { //判断参数的正确性 return; } temp = a[left]; i = left; j = right; while (i != j) { //判断是否相遇 while (a[j] >= temp && i < j) { //右边的是不是小于基准数 j--; } while (a[i] <= temp && i < j) { //左边的是不是大于基准数 i++; } if (i < j) { //找到左边大于基准数,右边小于基准数进行交换 t = a[i]; a[i] = a[j]; a[j] = t; } } a[left] = a[i]; //相遇了,把基准数位置进行调整 a[i] = temp; quickSort(left, i - 1); //递归的方法进行基准数左边的数进行调整 quickSort(i + 1, right);//递归的方法进行基准数右边的数进行调整 } int main(int argc, const char * argv[]) { int i,n; scanf("%d",&n); //输入数的个数 for (i = 1; i <= n; i++) { //输入数据 scanf("%d",&a[i]); } quickSort(1, n); //使用快速排序对输入的数进行排序 for (i = 1; i <= n; i++) { //输出排序后的数 printf("%d ",a[i]); } }
相信大家结合注释都能看懂代码,我就不细说了
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。