各种排序算法的优缺点

时间:2024.4.20

一、冒泡排序

已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与 a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比 较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对a[1]~a[n- 1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,以此类推。共处理 n-1轮后a[1]、a[2]、……a[n]就以升序排列了。

优点:稳定;

缺点:慢,每次只能移动相邻两个数据。

二、选择排序

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

选择排序是不稳定的排序方法。

n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:

①初始状态:无序区为R[1..n],有序区为空。

②第1趟排序

在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

……

③第i趟排序

第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(1≤i≤n-1)。该趟 排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。

优点:移动数据的次数已知(n-1次);

缺点:比较次数多。

三、插入排序

已知一组升序排列数据a[1]、a[2]、……a[n],一组无序数据b[1]、 b[2]、……b[m],需将二者合并成一个升序数列。首先比较b[1]与a[1]的值,若b[1]大于a[1],则跳过,比较b[1]与a[2]的值, 若b[1]仍然大于a[2],则继续跳过,直到b[1]小于a数组中某一数据a[x],则将a[x]~a[n]分别向后移动一位,将b[1]插入到原来 a[x]的位置这就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若无数组a,可将b[1]当作n=1的数组a)

优点:稳定,快;

缺点:比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候,但用链表可以解决这个问题。

四、缩小增量排序

由希尔在19xx年提出,又称希尔排序(shell排序)。

已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。发现当n不大时,插入 排序的效果很好。首先取一增量d(d<n),将a[1]、a[1+d]、a[1+2d]……列为第一组,a[2]、a[2+d]、 a[2+2d]……列为第二组……,a[d]、a[2d]、a[3d]……列为最后一组以次类推,在各组内用插入排序,然后取d'<d,重复上述操 作,直到d=1。

优点:快,数据移动少;

缺点:不稳定,d的取值是多少,应取多少个不同的值,都无法确切知道,只能凭经验来取。

五、快速排序

快速排序是冒泡排序的改进版,是目前已知的最快的排序方法。

已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先任取数据a[x] 作为基准。比较a[x]与其它数据并排序,使a[x]排在数据的第k位,并且使a[1]~a[k-1]中的每一个数 据<a[x],a[k+1]~a[n]中的每一个数据>a[x],然后采用分治的策略分别对a[1]~a[k-1]和a[k+1]~a[n] 两组数据进行快速排序。

优点:极快,数据移动少;

缺点:不稳定。

六、箱排序

已知一组无序正整数数据a[1]、a[2]、……a[n],需将其按升序排列。首先定义一个数组x[m],且m>=a[1]、a[2]、……a[n],接着循环n次,每次x[a]++.

优点:快,效率达到O(1)

缺点:数据范围必须为正整数并且比较小

六、归并排序

归并排序是多次将两个或两个以上的有序表合并成一个新的有序表。最简单的归并是直接将两个有序的子表合并成一个有序的表。

归并排序是稳定的排序.即相等的元素的顺序不会改变.如输入记录 1(1) 3(2) 2(3) 2(4) 5(5) (括号中是记录的关键字)时输出的 1(1) 2(3) 2(4) 3(2) 5(5) 中的2 和 2 是按输入的顺序.这对要排序数据包含多个信息而要按其中的某一个信息排序,要求其它信息尽量按输入的顺序排列时很重要.这也是它比快速排序优势的地方.

归并排序:归并排序是一种非就地排序,将需要与待排序序列一样多的辅助空间。在使用它对两个己有序的序列归并,将有无比的优势。其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlog2n)。对数据的有序性不敏感。若数据节点数据量大,那将不适合。但可改造成索引操作,效果将非常出色。

堆排序:由于它在直接选择排序的基础上利用了比较结果形成。效率提高很大。它完成排序的总比较次数为O(nlog2n)。它是对数据的有序性不敏感的一种算法。但堆排序将需要做两个步骤:-是建堆,二是排序(调整堆)。所以一般在小规模的序列中不合适,但对于较大的序列,将表现出优越的性能。


第二篇:各种新能源的优缺点


各种新能源的优缺点

核能 优点:1、核能发电不会排放巨量的污染物质到大气中,不会造成空气污染。2、核能发电不会产生温室效应的二氧化碳。3、核燃料能量密度比起化石燃料高上几百万倍,故核能电厂所使用的燃料体积小,运输与储存都很方便。

缺点:1、核能电厂会产生高低阶放射性废料,必须慎重处理。2、核能发电厂热效率较低,核能电厂的热污染较严重。3、核能电厂投资成本太大,电力公司的财务风险较高。

太阳能 优点:1、普遍:到处都有,可直接开发和利用,且无须开采和运输。2、无害:开发利用太阳能不会污染环境,它是最清洁能源之一。3、巨大:每年到达地球表面上的太阳辐射能约相当于130万亿吨煤。4、长久:太阳的能量是用之不竭的。

缺点:1、不稳定性:由于受到昼夜、季节、地理纬度和海拔高度等自然条件的限制以及晴、阴、云、雨等随机因素的影响。2、效率低和成本高:目前太阳能利用的发展水平,有些方面在理论上是可行的,技术上也是成熟的。但有的太阳能利用装置,因为效率偏低,成本较高。

风能 优点:风能为洁净的能量来源。内蒙古草原上的风力发电机风能设施日趋进步,大量生产降低成本,在适当地点,风力发电成本已低于发电机。风能设施多为不立体化设施,可保护陆地和生态。风力发电是可再生能源,很环保。

缺点:风力发电在生态上的问题是可能干扰鸟类。目前的解决方案是离岸发电,离岸发电价格较高但效率也高。在一些地区、风力发电的经济性不足:许多地区的风力有间歇性,更糟糕的情况是如台湾等地在电力需求较高的夏季及白日、是风力较少的时间;必须等待压缩空气等储能技术发展。风力发电需要大量土地兴建风力发电场,才可以生产比较多的能源。进行风力发电时,风力发电机会发出庞大的噪音,所以要找一些空旷的地方来兴建。现在的风力发电还未成熟,还有相当发展空间。

地热 优点:1、高效节能:地热供暖热量集中在人体收益的高度,热效率高;整个输送过程热损失小。地热供暖的热能能够利用充分。2、舒适保健。3、热稳定性好:由于地面层及蓄热量大,因此在间歇供暖的条件下室内温度变化缓慢,热稳定性好。4、节省空间。5、室温调节方便:地热分水器中的每一个环路都配置了各自的控制阀门,每个房间可以按各自所需的室温,调节流量,做到最大限度节省能源和开支。 缺点:1、对楼层高度有8cm左右的占用。2、铺设木地板则有干裂的麻烦,最好选择地砖或地热用复合式地板。3、设定温度不能太高,否则会降低输送管道的使用寿命。

海洋能 优点:取之不竭的可再生资源,潮汐能源有规律可循,开发规模大小均可。

缺点:获取能量的最佳手段尚无共识,大型项目可能会破坏自然水流、潮汐和生态系统。

生物质能 优点:1、提供低硫燃料,2、提供连接能源。3、讲有机物转化成燃料可减少环境公害。4、与其他非传统性能源相比较,技术上的难题较少

缺点:1、植物仅能讲极少量的太阳能转化成有机物2、单位土地面的有机物能量偏低3、缺乏适合栽种植物的土地4、有机物的水分偏多

氢能 优点:1、氢的原料是丰富的水2、氢燃烧生成的是水,不污染环境,不影响地球上的物质循环3、氢的储藏很容易

缺点:1、制取成本高,需要大量的电力2、生产、存储难:氢气密度小,很难液化,高压存储不安全

新能源产业规模持续扩大,产业结构不断优化。自20xx年以来,中国新能源产业规模上升到新的台阶。除了产业规模不断放大以外,中国新能源产业结构也不断优化升级。新能源各细分产业都得到不同程度发展,同时,产业技术不断成熟,和国外同类企业竞争的能力也不断提高。在制造业领域,不管是太阳能、风能还是生物质能领域,民营企业都是中国新能源产业发展的主要带动力量。在新能源领域,打通产业链上下游的企业联合越来越普遍。新能源产业发展地域特征越来越明显。在国家现有政策支持下,未来太阳能、风能将得到进一步发展,生物质发电等新能源发展潜力巨大。除太阳能、风能外,国内许多公司亦开始涉足生物质能源、沼气利用等新能源的相关产业,如丰原生化生产燃料乙醇、石油济柴大规模介入沼气发电等。

更多相关推荐:
用php实现的各种排序算法总结

用php实现的各种排序算法总结优化php性能的五个实用技巧:以下是五个优化技巧,熟练掌握后对于开发还是很有帮助的。1.对字符串使用单引号PHP引擎允许使用单引号和双引号来封装字符串变量,但是这个是有很大的差别的…

各种排序算法的总结和比较

1快速排序(QuickSort)快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。(1)如果不多于1个数据,直接返回。(2)一般选择序列最左边…

Java各种排序算法总结

排序是程序开发中一种非常常见的操作对一组任意的数据元素或记录经过排序操作后就可以把他们变成一组按关键字排序的有序队列对一个排序算法来说一般从下面3个方面来衡量算法的优劣1时间复杂度它主要是分析关键字的比较次数和...

最常用的排序算法总结

实际应用中最常用的排序是快速排序和堆排序所谓堆排序就是将最小的一个值放到堆栈的顶部这样就可以使最后出来的数完成排序快速排序是不稳定的堆排序是稳定的所谓稳定就是当两个值相等时排序后两个值的顺序和排序前相同以上两种...

各种排序算法总结

1冒泡排序交换排序方法之一冒小泡voidBublesortintaintn定义两个参数数组首地址与数组大小intijtempfori0iltn1iforji1jltnj注意循环的上下限ifaigtajtempa...

各种算法排序思想小结

1.选择排序基本思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。2.直接插入排序基本思想:每次将一个待排序的记录,按其关键字大小插入到前…

各种排序算法小结

各种排序算法小结排序算法是一种基本并且常用的算法由于实际工作中处理的数量巨大所以排序算法对算法本身的速度要求很高而一般我们所谓的算法的性能主要是指算法的复杂度一般用O方法来表示在后面我将给出详细的说明对于排序的...

八大排序算法总结

八大排序算法总结插入排序1.直接插入排序原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。要点:设立哨兵,作为临时存储和判…

经典排序算法总结(代码)

经典排序算法总结代码fly分享目录冒泡法2快速排序3插入排序4希尔shell排序5选择排序6堆排序7归并排序9附排序算法原理flash演示includeltiostreamgtincludeltstringgt...

7种排序算法总结

7种排序算法总结整理的时候资源来自网络不妥的联系我谢谢事实上目前还没有十全十美的排序算法有优点就会有缺点即使是快速排序法也只是在整体性能上优越它也存在排序不稳定需要大量辅助空间对少量数据排序无优势等不足因此我们...

几种常见排序算法总结

一冒泡排序已知一组无序数据a1a2an需将其按升序排列首先比较a1与a2的值若a1大于a2则交换两者的值否则不变再比较a2与a3的值若a2大于a3则交换两者的值否则不变再比较a3与a4依此类推最后比较an1与a...

选择排序算法总结

选择排序1基本思想每一趟从待排序的数据元素中选出最小或最大的一个元素顺序放在已排好序的数列的最后直到全部待排序的数据元素排完2排序过程示例初始关键字4938659776132749第一趟排序后133865977...

各种排序算法总结(43篇)