各种排序算法的对比

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

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

 

起泡排序:

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

特点:

稳定的排序方法

时间复杂度:最好情况O(n),最坏情况O(n2)

空间复杂度:O(1)

 

选择排序:

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

特点:

(1)简单选择排序:

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

空间复杂度为O(1) 

(2)树形选择排序:

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

 

插入排序:

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

特点:

稳定的排序方法

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

空间复杂度O(1)

算法简便,容易实现

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

 

快速排序:

思想:通过一趟快速排序将待排记录分割成相邻的两个区域,其中一个区域中记录的关键字均比另一个区域中记录的关键字小(区域内不一定有序),然后分别对这两个区域的记录再进行快速排序,直到子序列的长度为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之外的公因子。)

空间复杂度O(1)

 

堆排序:

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

特点:

不稳定排序

时间复杂度O(nlogn)

空间复杂度O(1)

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

 

归并排序:

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

特点:

稳定排序

时间复杂度O(nlog2n)

空间复杂度O(n)

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

 

 

基数排序:

思想:

特点:

 

        

 

  时间复杂度 | 空间复杂度

插入排序: 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)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值