`
chasewinds
  • 浏览: 15988 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

各种排序优缺点

 
阅读更多
转载程序人生 2010-04-24 23:25: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)

  优点:稳定,快;

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

  三、缩小增量排序

  由希尔在1959年提出,又称希尔排序(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 是按输入的顺序.这对要排序数据包含多个信息而要按其中的某一个信息排序,要求其它信息尽量按输入的顺序排列时很重要.这也是它比快速排序优势的地方.
分享到:
评论

相关推荐

    各种排序算法的优缺点

    每种算法都有其优点和缺点,选择合适的排序算法取决于具体的应用场景和数据特点。 冒泡排序是一种简单的排序算法,通过重复地比较和交换相邻元素来实现排序。其优点是稳定,缺点是慢,每次只能移动相邻两个数据。...

    几种c语言排序优缺点

    在C语言中,排序是程序设计中常见的任务之一,涉及到多种不同的排序算法,每种算法都有其特定的优点和缺点。以下是一些常见的排序方法及其特点: ...了解这些排序算法的优缺点,有助于我们在编程实践中做出明智的选择。

    c语言排序方法优缺点ppt

    **C语言排序方法详解及其优缺点** 在计算机科学中,排序是处理数据的重要步骤,它使得数据有序,便于检索和分析。C语言作为基础且强大的编程语言,提供了多种排序算法供程序员选择。以下是对几种常见C语言排序方法...

    排序算法的优劣比较

    排序算法的优劣比较,经过比较不同的数据量,进行不同的排序后的时间比较。

    几种排序算法总结及比较

    例如,可以使用随机生成的数据,或者包含大量重复值的数据,以及已部分排序的数据,以全面评估各种排序算法的性能。 在实际应用中,选择合适的排序算法取决于数据的特性和对时间、空间效率的需求。快速排序通常被...

    八大排序【C语言】

    今天,我们将对八大排序算法进行总结,使用C语言进行编程演示,并对每种算法的优缺点进行分析。 基本概念 在讨论排序算法之前,我们需要了解一些基本概念。数据是对客观事物分析之后的一种归纳,是用于表示客观...

    排序技术,整合各种排序算法思想

    在计算机科学领域,排序技术是数据处理的核心部分,它涉及到如何有效地组织和处理大量数据。...在实际编程中,还可以结合各种算法的优缺点,设计出更加高效的混合排序策略,以应对复杂多变的排序问题。

    希尔排序,冒泡排序,堆排序等各种排序算法

    这些排序算法各有优缺点,适用于不同的场景。例如,当处理小规模数据或部分有序的数据时,插入排序和冒泡排序可能更合适;而处理大规模数据时,快速排序和堆排序则表现出更好的性能。了解并熟练掌握这些排序算法,...

    灰色关联法,灰色关联法的优缺点及适用性,matlab

    3. 灰色关联法的优缺点: 优点:(1)处理数据量小,计算简单;(2)对数据的完整性要求不高,适合处理不完全信息;(3)能够揭示复杂系统中各因素的相互影响关系。 缺点:(1)对异常值敏感,可能因个别异常值影响关联度...

    数据结构课程设计(各种排序)

    在实际应用中,不同的排序算法有各自的优缺点,如快速排序在大多数情况下表现优秀,而归并排序则保证了稳定的效率。学习这些排序算法不仅能够加深对数据结构的理解,还能提高解决问题的能力。通过分析和实现这些排序...

    JAVA排序汇总 各种排序

    每种排序算法都有其优缺点,实际应用中需根据数据特性和性能要求选择合适的排序方法。理解这些排序算法不仅有助于编写高效的代码,也有利于参加面试时回答相关问题。在学习过程中,可以通过实践来加深理解,比如编写...

    各种排序的java代码归总

    这些排序算法各有优缺点,实际应用中需要根据数据特点和性能需求选择合适的排序方式。例如,快速排序通常被认为是最快的通用排序算法,而归并排序则在稳定性上表现出色。理解并熟练掌握这些排序算法,对于提升编程...

    各种常用排序算法的C语言实现

    在编程领域,排序算法是计算机科学中的核心概念,它们用于...以上这些排序算法各有优缺点,适用于不同场景。通过学习这些C语言实现,可以帮助开发者深入理解排序算法的工作原理,从而在实际问题中选择合适的排序方法。

    面试必考题目 各种排序实例及点评

    本文总结了各种排序实例,包括直接插入排序、shell 排序、选择排序、冒泡排序、快速排序、归并排序等,并对每种排序算法的特点、优缺点和应用场景进行了分析。 1. 排序算法的分类 根据平均时间复杂度,可以将排序...

    各种排序算法Demo

    这些排序算法各有优缺点,适用于不同的场景。例如,冒泡排序和插入排序简单易懂,但效率较低;快速排序平均时间复杂度为O(nlogn),但最坏情况下为O(n^2);桶排序则适合大量数据且数据范围较窄的情况。学习和理解这些...

    c#各种排序算法大全

    以上四种排序算法都是经典的排序方法,它们各有优缺点。例如,插入排序在小规模数据或者基本有序的数据集上表现较好;而选择排序和冒泡排序虽然简单,但在大数据量的情况下效率较低;希尔排序则是一种改进的插入排序...

    各种排序算法比较

    通过了解这些算法的特点及其优缺点,我们可以根据实际需求选择最适合的排序算法。在实际应用中,合理选择排序算法能够显著提高程序的执行效率,降低资源消耗,提升用户体验。希望本文能够帮助大家更好地理解并掌握...

    十大机器学习算法优缺点.pdf

    机器学习是人工智能领域的一个重要分支,它涉及到一系列的算法,每种算法都有其独特的优缺点。以下是关于十大机器学习算法的详细分析: 1. C4.5算法:这是ID3决策树算法的改进版本,使用信息增益率来选择属性,以...

    八种排序算法比较总结

    详细总结了和分析了八种排序算法的比较 包括稳定性的比较和时间空间复杂度的比较

    各种排序的实现与效率分析

    各种排序算法都有各自的优缺点,适用场景和效率各不相同。在实际应用中,需要根据数据的规模、特性以及对时间、空间复杂度的要求等因素来选择合适的排序算法。例如,对于小数据集可以直接使用插入排序,对于大数据集...

Global site tag (gtag.js) - Google Analytics