排序算法总结

排序小结

  • 直接插入排序
    • 主循环:从第二个元素开始向后执行,判断元素与其前一位的关系;
      • PS:该元素的之前均已被排好序;
    • 若待排元素小于前一位,进入子循环:
      • 记录待排元素为监视哨;
      • 向前循环判断元素与待排元素大小关系,若大于,则元素后移;
        • PS:第一个后移的元素占据待排元素的位子;
      • 若小于,则将待排元素赋值给该元素的后一位;
  • 快速排序
    • 主循环:对输入的表进行第一次划分,以轴为中心,比轴小的在轴左边,大的在右边;
      • ps:无所谓顺序,只分左右,到最后自然成序;
      • 对左右序列递归调用该函数;
    • 划分的算法思想
      • 以最左边元素为轴,记录监视哨,记录为low;
      • 先从右向左扫描,直到找到比轴小的,记录为high,并将其赋值给low;
      • 再从low位置到右扫描,直到找到比轴大的,赋值给high;
        • high已赋值出去,故可随意被赋值;
      • 重新从high位置向左扫描,重复上述步骤;
  • 堆排序
    • 大顶堆
      • 最大元素在根节点;
      • 父亲结点一定大于其左右孩子;
    • 基本思想
      • 通过维护堆的性质,筛选出最大元素并置于根节点;
      • 将根节点(即最大元素)与最尾部元素互换,作为序列最后一个元素;
      • 对除根节点之外的元素继续建立大顶堆,即重新筛出新堆中最大的,重复上述步骤;
    • 维护堆的性质的算法思想
      • 调用该函数时,除堆顶外均符合大顶堆的性质;
      • 定义关键字s作为存放堆顶元素位置的标志,是循环中每一次比较时的父亲节点;
      • 记录堆顶元素;
      • 自顶向下,先比较根节点的左右孩子大小;
      • 比较堆顶元素与较大孩子的大小关系:
        • 若小于,将较大孩子赋值给根节点;
        • 若大于,则循环结束,堆顶元素有资格做爸爸,该父亲节点位置即放置堆顶元素的位置;
    • 建堆算法思想
      • 自底向上,从第一个非叶子节点开始,循环调用维护性质函数;
        • 即对以父亲节点为根节点的一个堆维护堆的性质;
      • 对上一个结点继续重复上述步骤;
  • 归并排序
    • 对数组不断二分,直至待排序列长度为1;
    • 回退,对序列进行归并:
      • 两个序列,先对第一个元素进行比较,将大的记入数组,较大元素所在序列指针右移;
      • 重复上述步骤;
    • 递归进行,直至回退完全;
  • 计数排序
    • 先统计每个元素的个数,即在数组C[i]中存值等于 i 的元素个数;
    • 令C[i]=C[i]+C[i-1],即在C[i]中存值小于等于 i 的元素个数;
    • 查表填入,将元素填入数组值作下标的位置,并将数组值-1,即下次再填就填在前一个;
  • 基数排序
    • 从最低位开始,对数字进行逐位排序;
      • 即对每个元素的个位排序,然后十位,以此类推;

        排序算法小结

  • 两种数据结构
    • 线性表
    • 二叉树
  • 六种排序算法
    • 插入排序
    • 快速排序
    • 堆排序
    • 归并排序
    • 计数排序
    • 基数排序
  • 一种算法设计策略
    • 分治算法

转载于:https://www.cnblogs.com/fzlzc/p/11084834.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值