码迷,mamicode.com
首页 > 编程语言 > 详细

几种排序算法的比较转自http://blog.csdn.net/keenweiwei/article/details/3697452

时间:2016-09-11 10:22:46      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

1冒泡排序:

已知一组无需数据a[1],a[2],a[3],a[4],a[5][a[n],将其按升序排列,首先找出这组数据中最大值,将a[1]与a[2]比较,若a[1]大,则交换两者的值,否则不变,在继续将a[1]与a[3]比较,。。。。最后找出最大值a[n];在用同样的方法找出次大值,依次类推,a[n]就以升序排列;

优点:稳定,比较次数已知;缺点:慢,每次只移动两个数据,移动数据的次数多;

二选择排序:

已知一组无需数据a[1],a[2],a[3],a[4],a[5][a[n],将其按升序排列,首先比较a[1]与a[2]的值,若a[1]大于a[2],则交换两者的值,否则不变,在比较a[1]与a[3]的值,若a[1]大于a[3]则交换两者的值,否则不变,依次类推,得到a[1]肯定是最小的在依次找出次小值,;

优点:稳定,比较次数与冒泡一样,数据移动次数比冒泡少;缺点:相对之下还是慢

三插入排序:

已知一组升序排列数据a[1],a[2]...a[n],一组无序排列数据b[1],b[2],b[3]....b[n],需将二者合并成一个升序数列;首先比较b[1]与a[1]的值,若b1大于a[1],则跳过,比较b[1]与a[2]的值,若b[1]仍然大于a2,则继续跳过,直到b1小于a数组中的某一个数据ax,则将ax-an分别向后移动一位,将b[1]插入ax位置,b2到bm用同样方法插入(若无数组a,可将b1当做n=1的数组a);

优点:稳定,快;缺点:比较次数不一定,比较次数越多,插入点给后的数据移动的越多,特别是数据量庞大的时候,不过链表可以解决这个问题;

四希尔排序(缩小增量排序)

已知一组无序数据a1,a2,a3,a4.。。an;需将其安升序排列,发现当n不大时,插入排序的效果很好,首先取一增量d(d<n),将a1,a(1+d),a(1+2d)。。。列为一组,a2,a(2+d),a(2+2d)。。。列为一组ad,a2d,a3d。。。列为一组,依次类推,在各组内分别用插入排序,然后取d‘小于d,重复上述操作,知道d=1;

优点:快,数据移动少;缺点:不稳定,d的取值多少,应取多少个值,都无法确切知道,只能凭经验;

五快速排序

是冒泡排序的改进版,是目前已知最快的排序算法,已知一组无需数据a[1],a[2],a[3],a[4],a[5][a[n],将其按升序排列,首先任取数据ax作为基准,比较ax与其他数据并排序,使ax排在数据的第k位,并且使a1-a(k-1)中每一个数据都小于ax,a(k+1)-an中的每一个数据都大于ax,然后采用分治的策略分别对a1-a(k-1)与a(k+1)-an两组数据进行快速排序;

优点:极快,数据移动少,缺点:不稳定

 

几种排序算法的比较转自http://blog.csdn.net/keenweiwei/article/details/3697452

标签:

原文地址:http://www.cnblogs.com/jijiel/p/5861092.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!