交换排序算法

交换即根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。

本次主要介绍冒泡排序快速排序

一、冒泡排序

(1)冒泡排序的基本思想如下:

(2)示例如下:(按照从小到大(升序)排序)

从第一个开始,两个比较,若第一个比第二个小,就交换次序,否则不交换。

(3)算法代码:

(4)冒泡排序的性能分析:

空间复杂度为O(1),只使用了常熟个辅助单元。

时间复杂度

最好情况下,初始序列有序时,比较次数为n-1,移动次数为0,最好情况下的时间复杂度为O(n)。

最坏情况下,初始序列为逆序时,需要进行n-1趟排序,第i趟排序要进行n-i次关键字的比较,每次比较后都必须要移动3次来交换元素位置,此时:

最坏时间复杂度为O(n^2)。

平均时间复杂度为O(n^2)。

冒泡排序是一种稳定的排序算法。

适用于顺序存储和链式存储的线性表。

冒泡排序所产生的有序子序列一定是全局有序的,(不同于直接插入排序(局部有序))。每一趟冒泡排序都会将一个元素放到其最终位置上。直接插入排序不一定。

二、快速排序

(1)基本思想

(2)示例如下

(3)算法代码

      使用一个划分函数,然后使用递归算法。

(4)性能分析

空间复杂度:需要使用递归工作栈保存每层递归所必要的信息。最好情况下为O(log n),最坏情况下,需要n-1次调用,栈的深度为O(n)。平均情况下,O(log n)。

时间复杂度:

最坏情况下为O(n^2),最好情况下,O(nlog n)。

快速排序是一种不稳定的排序算法。

快速排序是所有内部排序算法中平均性能最优的排序算法。

注:log 以2为底。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值