排序复杂度详解(1)

稳定排序算法是指在排序过程中两个排序关键字相同的元素,在排序的过程中位置不发生变化。

1.直接插入排序:

      每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。

  第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程,是稳定排序。

      

2.直接选择排序:

      首先在所有记录中选出排序吗最小的记录,把它跟第一个记录交换,然后在其余的记录内选出排序码最小的记录,跟第二个记录交换...以此类推,直到所有记录排完为止。是不稳定排序。

      平均时间复杂度:o(n^2);原因:无论文件初始如何,第 i 趟排序都要选出最小关键字的记录,须作 n - i 比较,因此总比较数为 n*(n-1)/2= o(n^2)。

3.堆排序:

      是对直接选择排序的有效改进。分为大根堆和小根堆。大根堆的根节点是堆里所有节点关键字中最大的。不稳定排序。

      设有待排序序列 {12,56,23,26,15,86,92,75,65}:

   (大根堆) 根据原序列形成二叉树,从最底子树开始,判断子节点是否大于父节点,如果是就跟父节点交换,使子节点都小于父节点,过       程如图8.8;

    形成初始堆:图8.9第一个图

    将根节点输出,将最底子节点置顶并再次执行图8.8的建堆过程.....以此类推,最终输出答案。

     最坏时间复杂度:o(nlog2n);原因:图8.8初始堆过程,当每个阶段堆的最大节点都在最底层时,就需要至少d次交换,d为树的高度,根据二叉树节点n与高度d的关系为:d^2-1=n;求出 d = log2(n+1)=log2(n);所以每次初始堆过程需要的时间复杂度为o(n) =  log2(n);又因为一共有n个节点,所以要初始化和输入n次,所以时间复杂度为:o(nlog2n) 。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值