数据结构中各种排序算法比较

发布 2021-05-30 13:38:28 阅读 8000

1快速排序(quicksort)

快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。

1)如果不多于1个数据,直接返回。(2)一般选择序列最左边的值作为支点数据。

3)将序列分成2部分,一部分都大于支点数据,另外一部分都小于支点数据。(4)对两边利用递归排序数列。

快速排序比大部分排序算法都要快。尽管我们可以在某些特殊的情况下写出比快速排序快的算法,但是就通常情况而言,没有比它更快的了。快速排序是递归的,对于内存非常有限的机器来说,它不是一个好的选择。

2归并排序(mergesort)

归并排序先分解要排序的序列,从1分成2,2分成4,依次分解,当分解到只有1个一组的时候,就可以排序这些分组,然后依次合并回原来的序列中,这样就可以排序所有数据。合并排序比堆排序稍微快一点,但是需要比堆排序多一倍的内存空间,因为它需要一个额外的数组。

3堆排序(heapsort)

堆排序适合于数据量非常大的场合(百万数据)。

堆排序不需要大量的递归或者多维的暂存数组。这对于数据量非常巨大的序列是合适的。比如超过数百万条记录,因为快速排序,归并排序都使用递归来设计算法,在数据量非常大的时候,可能会发生堆栈溢出错误。

堆排序会将所有的数据建成一个堆,最大的数据在堆顶,然后将堆顶数据和序列的最后一个数据交换。接下来再次重建堆,交换数据,依次下去,就可以排序所有的数据。

4 shell排序(shellsort)

shell排序通过将数据分成不同的组,先对每一组进行排序,然后再对所有的元素进行一次插入排序,以减少数据交换和移动的次数。平均效率是o(nlogn)。其中分组的合理性会对算法产生重要的影响。

现在多用的分组方法。

shell排序比冒泡排序快5倍,比插入排序大致快2倍。shell排序比起quicksort,mergesort,heapsort慢很多。但是它相对比较简单,它适合于数据量在5000以下并且速度并不是特别重要的场合。

它对于数据量较小的数列重复排序是非常好的。

5插入排序(insertsort)

插入排序通过把序列中的值插入一个已经排序好的序列中,直到该序列的结束。插入排序是对冒泡排序的改进。它比冒泡排序快2倍。

一般不用在数据大于1000的场合下使用插入排序,或者重复排序超过200数据项的序列。

6冒泡排序(bubblesort)

冒泡排序是最慢的排序算法。在实际运用中它是效率最低的算法。它通过一趟又一趟地比较数组中的每一个元素,使较大的数据下沉,较小的数据上升。它是o(n^2)的算法。

7交换排序(exchangesort)和选择排序(selectsort)

这两种排序方法都是交换方法的排序算法,效率都是o(n2)。在实际应用中处于和冒泡排序基本相同的地位。它们只是排序算法发展的初级阶段,在实际中使用较少。

8基数排序(radixsort)

基数排序和通常的排序算法并不走同样的路线。它是一种比较新颖的算法,但是它只能用于整数的排序,如果我们要把同样的办法运用到浮点数上,我们必须了解浮点数的存储格式,并通过特殊的方式将浮点数映射到整数上,然后再映射回去,这是非常麻烦的事情,因此,它的使用同样也不多。而且,最重要的是,这样算法也需要较多的存储空间。

9总结。

下面是一个总的**,大致总结了我们常见的所有的排序算法的特点。排序法平均时间最差情形冒泡交换选择插入。

o(n2)o(n2)o(n2)o(n2)

o(n2)o(n2)o(n2)o(n2)

稳定度额外空间备注稳定o(1)不稳定o(1)不稳定o(1)稳定。

o(1)n小时较好n小时较好n小时较好。

大部分已排序时较好b是真数(0-9),基数。

o(logrb)o(logrb)稳定。

o(n)r是基数(个十百)s是所选分组。

shello(nlogn)o(ns) 1<2不稳定o(1)快速归并堆。

o(nlogn)o(n2)

不稳定o(nlogn)n大时较好。

o(1)n大时较好n大时较好。

o(nlogn)o(nlogn)稳定。

o(nlogn)o(nlogn)不稳定o(1)

数据结构内部排序算法比较

目录。摘要 1 1绪论 12系统分析 1 2.1 功能需求 1 2.2数据需求 1 2.3 性能需求 2 3总体设计 2 3.1系统设计方案 2 3.2功能模块设计 2 4详细设计 3 4.1 数据结构定义 3 4.2伪随机产生数据模块 4 4.3简单选择排序模块 6 4.4起泡排序模块 7 4.5...

数据结构课设 排序算法比较

6 排序算法比较 必做 设计要求 利用随机函数产生n个随机整数 n 500,1000,1500,2500,30000 利用直接插入排序 折半插入排序,起泡排序 快速排序 选择排序堆排序,基数排序七种排序方法。可添加其它排序方法 进行排序 结果为由小到大的顺序 并统计每一种排序所耗费的时间。各个函数均...

数据结构内部排序比较分析

数据结构实训报告。实验名称 数据结构。题目 内部排序比较。专业班级 姓名 学号 实验日期 一 实验目的 通过随机数据比较各内部排序算法的关键字比较次数和关键字移动的次数,以取得直观感受。训练学生综合设计算法能力。二 实验要求 待排序长度不小于100,数据可有随机函数产生,用五组不同输入数据做比较,比...