数据结构各种排序的对比

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr_zhuo_/article/details/74276717

关键字和排序方法中“趟”的含义:

在内部排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一趟排序。
基本思想和特点:


起泡排序:

思想: 起泡排序是一种简单的交换排序,它通过对无序序列区中的相邻记录的关键字进行“比较”和记录位置的“交换”,以实现关键字较小的记录向“一头”漂移,而关键字较大的记录向“另一头”下沉,从而达到记录按关键字非递减(递增)顺序有序排列的目标。

特点:

稳定的排序方法

时间复杂度:最好情况On),最坏情况On2

空间复杂度:O1

 

选择排序:

思想:每一趟在n-i+1(i=1,2,…,n-1个记录中选取关键字最小(大)的记录作为有序序列中第i个记录。

特点:

1)简单选择排序:

时间复杂度为On2(与待排记录的初始状态无关)

空间复杂度为O1 

(2)树形选择排序:

时间复杂度为Onlog2n,需较多辅助存储空间(多了左右子树结构)。

 

插入排序:

思想:将待排序序列分成有序和无序两个子序列,每次从无序子序列中选择一个待排序元素,将它与已形成的有序子序列中的各个元素比较,寻找符合排序条件的插入位置,将待排序元素插入到该位置。

特点:

稳定的排序方法

时间复杂度On2) 当排序序列有序时,其时间复杂度为O(n)

空间复杂度O1

算法简便,容易实现

适用于待排序记录数量较小的情况

 

快速排序:

思想:通过一趟快速排序将待排记录分割成相邻的两个区域,其中一个区域中记录的关键字均比另一个区域中记录的关键字小(区域内不一定有序),然后分别对这两个区域的记录再进行快速排序,直到子序列的长度为1,使整个序列有序。

特点:

时间复杂度:

最佳状况(当每次分割的两个区块都均匀大小时)O(n*log2n)

最坏状况(待排序数据序列本身有序时)O(n2)

平均状况: O(n*log2n)

空间复杂度:主要来源于排序过程中递归的深度(即递归使用的栈的深度)

最佳状况: O(log2n)

最坏状况: O(n)

平均状况:介于O(log2n)O(n)之间

******

平均时间复杂度低,适用于完全随机的序列

不稳定排序;空间效率低;

结点顺序不好(有序)则效率低(初始记录序列按关键字有序时,快速排序将蜕化为冒泡排序)。

 

shell排序:

思想:根据间隔值d将待排序记录序列分割成为若干子序列(即把那些位置相隔为d的元素看作一个子序列),并对每个子序列分别进行直接插入排序,每趟之后减小d值,重复上述过程,直到d<1为止。

待整个序列中的记录“基本有序”时再对全体记录进行一次直接插入排序。

d的取值将直接影响shell排序的效率。

特点:

不稳定的排序方法

时间复杂度与增量序列dlta[]相关,约为n1.3(阅读教材p272(应使增量序列中的值没有除1之外的公因子。)

空间复杂度O1

堆排序:

思想:与堆对应的完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。堆的外观为根(子树根)最小或最大的顺序存储的完全二叉树

特点:

不稳定排序

时间复杂度Onlogn

空间复杂度O1

运行时间主要耗费在建初始堆和调整堆上,适用于大批量数据的部分排序(1000个数据取5个关键字最大的数。)

 

归并排序:

思想:将两个或两个以上的有序表组合成一个新的有序表的过程。

特点:

稳定排序

时间复杂度Onlog2n

空间复杂度On

适用于处理大批量数据的排序

 

 

基数排序:

思想:

特点:

 

        


  时间复杂度 | 空间复杂度

插入排序: O(n2)         O(1)

归并排序: O(nlogn)      O(n)

选择排序: O(n2)         O(logn)

冒泡排序: O(n2)         O(1)       稳定排序

------------------------------------------------------

快速排序: O(nlog2n)--O(n) O(1)       不稳定排序

Shell排序: O(n1.3)       O(1)

堆排序:   O(nlog2n)     O(1)

基数排序: O(d(n+rd))     O(rd)

猜你喜欢

转载自blog.csdn.net/Mr_zhuo_/article/details/74276717
今日推荐