六 排序

6.1 插入排序

(1)直接插入排序

思想:先将序列中第一个记录看成一个有序子序列,从第二个记录开始,逐个进行插入,直至整个序列有序,共n-1趟插入

 

时间复杂度:

关键字比较次数n^2/4

关键字移动次数n^2/4

 

空间复杂度S(n) = O(1)

 

稳定的排序算法

(2)折半插入排序

思想:基于折半查找方法确定插入位置的排序,找到插入位置后,一起向后移动

时间复杂度T(n) = O(n^2)

空间复杂度S(n) = O(1)

 

希尔排序

思想:先取一个正整数d1<n,把所有相隔d1的记录放在一组,组内进行直接插入排序;然后去d2<d1,重复上述分组和排序操作,直至di=1,即将所有的记录放在一个组中

 

不稳定的排序方法

6.2 交换排序

6.2.1 起泡排序

将第一个记录的关键字与第二个记录的关键字进行比较,若为逆序,则交换,然后比较第二个与第三个记录,以此类推,直至第n-1个记录与第n个记录比较为止。

对前n-1个记录进行第二趟气泡排序,结果是关键字次大的记录安置在第n-1个记录位置

重复上述步骤,直到在一趟排序过程中没有进行过交换记录的操作。

比较次数1/2(n^2-n)

移动次数3/2(n^2-n)

空间复杂度S(n) = O(1)

稳定的排序算法

适用于元素按较少,或初始基本有序

6.2.2 快速排序

(1)选择好的边界值(可以选择中间值)

(2)扫描数组,将小于等于边界值的元素放在子数组1中,将大于边界值的元素放在子数组2中

比较次数

较好情况下(总是选择中间值作为边界值)n(logn+1)

最坏情况下T(n) = O(n^2)

空间复杂度,需要栈来实现递归

最坏S(n) = O(n)

一般S(n) = O(log2(n))

不稳定的排序方法

不适合对小规模数据进行排序

6.3 选择排序

6.3.1 简单选择排序

6.3.2 堆排序

由无序序列建立堆

输出对顶元素后,调整剩余元素,生成新的堆

 

6.4 归并排序

思想:2-路归并排序

假设初始化序列含n个记录,看成含有n个有序的子序列,每个子序列长度为1

两两合并,得到有序子序列

再两两合并,知道得到一个长度为n的有序序列为止

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值