范文无忧网计划总结工作总结

关于快速排序性能的疑问

02月17日 编辑 fanwen51.com

[数据结构堆排序算法]#includevoid adjust(int *list,const int root,const int n); void HeapSort(int *list,const int n) { int i=0; for(i=n/2;i>=1;i--) adjust(list,i-1,n); int t=list[n]...+阅读

当然是递归,重复调用函数的开销并不会很大, 待排序数组,元素为int型,元素大小为0-100k之间的随机数,初始状态无序 1:系统排序函数 100k个数据 秒过,1000k个数据 0.125秒,10000k个数据1.25秒 2:冒泡排序 100k个数据 21秒 3:选择排序 100k个数据 10秒 4:插入排序 100k个数据 5秒 5:希尔排序 100k个数据 秒过,1000k个数据 0.3秒,10000k个数据 4.5秒 6:希尔排序(位运算) 100k个数据 秒过,1000k个数据 0.3秒,10000k个数据 3.7秒 7:归并排序 100k个数据 1.2秒 8:快速排序(0点起)100k个数据 秒过,1000k个数据 0.156秒,10000k个数据 2.047秒 9:快速排序(0点起,位运算)100k个数据 秒过,1000k个数据0.141秒,10000个数据 1.5秒 10:堆排序 100k个数据 秒过,1000k个数据 0.3秒,10000k个数据 6秒 11:基数排序(字符运算)100k个数据 秒过,1000k个数据0.312秒,10000k个数据 1.781秒 12:基数排序(位运算)100k个数据 秒过,1000k个数据0.06秒,10000k个数据 0.6秒 13:鸽巢排序 10000k个数据 0.05秒

系统的快速排序是随机化快速排序,所以速度稍微快一点,不过我自己写的指定0起点的快速排序,在10000k个数据的时候只比系统快速排序慢了0.25秒而已,应该不算是性能变差了吧 这是我做的各种排序的比较结果,所有排序都是我自己写的,自认为都已经优化到了极点了。 所以我这个数据应该有参考价值 排序算法比较总结

(1) 冒泡排序作为排序的始祖有着不可磨灭的光辉,但是随着时代的进步,这种最简洁的代码执行效率已经无法满足时代的要求。

(2) 选择排序作为一个算法进步的过渡产物,比冒泡排序的执行速度快上一倍,已经是一个相当大的进步。但是由于是不稳定排序,所以实用价值稍微降低了一些。

(3) 插入排序作为一个崭新的排序思想,还是值得表扬的,四倍于冒泡排序的效率,让它在排序算法界分得了一杯羹。

(4) 归并排序这种采用分治思想的排序是稳定排序算法的历史转折点,十倍于冒泡算法的执行效率带给他一度的辉煌。

(5) 堆排序倚靠优秀的二分法遍历数组,比较和交换次数都随着数据的增多成几何次方减少,是在数据量非常大且不需求数据稳定性的时候的一个不错的选择。

(6) 希尔排序作为插入排序的改良版,绝对是产生了质的飞跃,比插入排序的执行效率提高了三百多倍。即便如此,跟更优秀的算法相比,还是相差甚远。

(7) 快速排序不愧为经验证明相当快的排序算法,甚至有句名言叫做“随机化快速排序可以满足一个人一辈子的人品需求。”,以至于微软将快速排序列入了官方函数库,比冒泡排序快一千四百倍的速度,让它拥有不可撼动的地位。

(8) 基数排序又称捅排序,而且是稳定排序,由于它没有任何数据的比较,所以执行速度会明显高于一切比较排序算法,虽然快速排序的速度已经达到了冒泡排序的一千四百被,但是基数排序比起快速排序,仍然能再快3.3倍以上,使用基数排序绝对会让你觉得对得起你付出的每一行代码。

(9) 鸽巢排序和基数排序一样是稳定排序且没有任何数据的比较,各种教程中说它很少可以在灵活性, 简便性, 尤是速度上超过其他排序算法,但是经过实践的证明,鸽巢排序不会出现任何最坏的情况,而且在对于【大体正序】、【大体逆序】、【无序】普遍情况来说,可以比基数排序再快十倍以上,绝对是排序算法王道中的王道。

延伸阅读:

C语言中的排序方法探索根据自己的学习体会总结各种排序方法的可能会有些小错误,你自己可以根据需要进行改动,比如你可以直接定义一组数,就不需要随机产生数了,我想你应该改得了,呵呵,代码如下:#include#include#include#include#includeusingn...

大学教师的职称评定以及具体排序1、申报讲师任职资格者,需具备下列条件之一: (1)大学本科毕业并取得学士学位,担任助教职务4年以上; (2)硕士研究生毕业并取得硕士学位,从事本专业工作3年以上。 2、申报副教授任...

快速排序算法问题看看大家的思路/*刚看了下算法导论,写了一个,感觉效率还可以,你看看 */ #include <stdio.h> static int a[8] = {3, 7, 2, 8, 4, 5, 3, 9}; void swap (int *m, int *n) { int temp = *m; *m...

俄语人称代词物主代词疑问代词的变格表俄语代词:俄语的代词包括人称代词、疑问代词、物主代词等。俄语中的人称代词用来代替人或事物,有三个人称和单、复数的区别: + O1 Y7 j3 ^( p4 V, ` 单数 复数 ' j l( M! t. X...

关于少数民族骨干计划我很疑问请清楚的人士说一下我报了这个计划,2011年考研的。现在一一回答你的问题: 1、所要开的证明是能证明你是西部12省的少数民族的。需要户口本复印件。 2、今年你就可以报名了。网报的时候需要去省教...

C语言排序的方法现在流行的排序有:直接插入排序、冒泡排序、简单选择排序、希尔排序、快速排序、堆排序、归并排序、基数排序。 对n个记录进行选择排序的方法是:通过n-i次关键字之间的比较,从n...

C语言的快速排序的算法是什么啊快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一...

c语言选择法排序void sa(int array[],int n) { int i,j,k,temp; for(i=0;i<10;i++) { k=i; //保存i的值,用k来进行循环排序 for(j=i+1;j<n;j++) //将第i个元素后面的元素与第i个元素进行比较...

排序算法c语言n个数字的排序我近期做练习的时候专门为排序做了一个c程序,你看看怎么样,包括了很多排序方法 #include#include#include#define LEN 10 //初始化数组 void init(int *arr,int len); //打印数...

推荐阅读
图文推荐
栏目列表