数据结构与算法(八)排序

排序要考虑到具体所使用的数据结构,本文总结一下各种数据结构的下的排序算法。

向量结构:由数组为基础而构建成,循RANK访问。

无序查找:O(N);无序插入:O(N);无序删除:O(N)

有序查找:二分查找O(logn)。有序唯一化:O(n)。

排序:CBA式排序的复杂度下限为O(NlogN)。冒泡排序:O(N*N),二路归并排序;O(nlogn).

快速排序:平均效率达到O(nlogn),最坏达到O(N*N)。首选算法,易于实现,效率高。

原理:找出轴点,以轴点为界,轴点之前的元素均不小于轴点,轴点之后的元素均不大于轴点。
找出所有轴点。关键在于如何构造轴点。
版本A:
    任选一个元素为候选轴点元素与首元素交换
    以首元素为候选轴点。
    while(lo<hi){
    while尾部元素与候选轴点大小:
        若尾部元素>=候选元素:
            尾部位置--;
    首部元素=尾部元素;
    while首部元素与候选元素大小:
        若首部元素<=候选元素:
               首部位置++;
    尾部元素=首部元素;  
    } 
    首部元素=候选元素;
    返回 轴点RANK。
算法时间复杂度O(hi-lo)向量范围 。
如何选择轴点才可降低最坏情况出现的概率。
随机选择,待排序向量中任取三个元素,再取中元素。
平均效率为O(nlogn),且常系数较小。缺点:存在退化情况。重复选取某一元素为轴点元素。
版本B:修改了候选元素与首尾元素的比较方式,去掉了等于这一情况。缺点:稳定性不足加剧。

列表结构:查找O(N),插入和删除:常数时间。唯一化:O(N*N)。

排序:插入排序O(N*N);选择排序O(N*N);二路归并排序;O(nlogn).。

两个有序列表的归并:O(N+M).

二叉树:插入:常数时间,但还需更新高度。查找:先遍历,再查找时间复杂度O(N)。删除:跟新祖先高度需要时间。

完全二叉树:跟新祖先高度时为LOG(n)。

二叉搜索树:有序树。查找:最坏情况下O(N)。主要取决于高度。插入,删除也是和查找一样。主要取决于结构。

平衡二叉搜索树:AVL

插入:O(logn),删除:O(logn)。查找也是。

词典结构中的跳转表:查找O(logn),插入与删除也是一样。

词典结构中的散列表:查找与插入大可能在常数时间。根据冲突情况判断。散列排序:桶排序O(n+m)。基排序:O(T*(N+M)).T为关键码的字段数。

堆:插入与删除:O(LOGN),获取最大值常数时间。也就是说堆排序为:O(NLOGN),但是更优秀,高于其他算法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值