码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【数据结构之排序】


    数据结构之排序(内部排序和外部排序)

    • 一、内部排序
      • 排序定义
      • 直接插入排序
      • 冒泡排序
      • 简单选择排序
      • 希尔排序
      • 快速排序
      • 归并排序
    • 二、外部排序
      • 多路平衡归并和败者树
      • 置换和选择排序
      • 最佳归并树

    声明:此为个人笔记,代码一部分来自王道408课程,仅供个人学习使用,如有侵权请联系;如有转载使用,一切后果自行负责与本人无关

    一、内部排序

    排序定义

    直接插入排序

    直接插入排序算法就是先将第一个元素认为有序,然后后面的元素与第一个有序元素比较,若比它小则插到前面,若大则位不置变,此时有序序列由一个元素扩充为两个,以此类推。
    在这里插入图片描述
    在这里插入图片描述
    算法实现:
    在这里插入图片描述
    小总结:
    在这里插入图片描述

    冒泡排序

    每一趟排序都会将最大或最小的元素沉到底部或冒泡到顶部。以第一趟为例,43与21比较,43较大所以下沉,然后43与89比较,89较大所以位置不变,89再与15比较,89较大,所以89下沉,89再与28比较,89较大继续下沉,89再与43比较,89依然较大所以继续下沉,此时一轮结束找到最大的元素89.
    在这里插入图片描述

    简单选择排序

    一第一趟为例,引入一个下标min,假设第一个元素最小,min=1,r[min]与r[2]~r[6]的所有元素逐一比较,发现最小的仍是r[1]则此时r[1]进入有序队列,然后将剩下的元素再进行选择排序。

    希尔排序

    希尔排序的特点是只跟距离为d的元素进行比较,如d=5时,59只跟23比较,发现23更小,则交换位置,48跟37比较,37较小所以交换位置,以此类推。

    快速排序

    先向前搜索,high所指的元素先于r[0]进行比较,发现并没有比r[0]小所以high往前移动。

    high指向37发现比r[0]来的小,所以high所指的元素就移到low所指的位置。

    此时向后搜索,low的位置往右移一位,指向r[2],此时r[2]接着与r[0]比较发现比r[0]小,low继续右移一位,指向r[3],r[3]比r[0]大所以r[3]的元素移到high所指的位置。

    最终low=high这个位置就是59的最终位置。快速排序的特点就是每一轮会找到一个中间位置,当待排序序列基本有序时,快速排序就失效。
    在这里插入图片描述

    归并排序

    特点就是两两归并,先把每一个元素都看成一个只含有自身的有序队此时有七个,然后两两归并成为一个变成4个有序队,其中59因为第一趟时没有归并对象所以就继续自成一队,
    然后四个有序队接着归并,变成两个有序队,最后变成一个有序队。

    二、外部排序

    多路平衡归并和败者树

    在这里插入图片描述

    置换和选择排序

    在这里插入图片描述

    最佳归并树

    这边利用的是赫夫曼树的思想,拓展到 n 叉树中,
    实际上就是添加权值为 0 的虚结点使得 N 叉树最优,因为这边的归并操作的 IO 次数的计算等于归并树的带权路径和的两倍。
    至于要添加的虚结点数量公式比较容易推

    在这里插入图片描述

  • 相关阅读:
    爬虫 | 基础模块了解
    电力电子转战数字IC20220822day66——断言和序列
    一个 Angular 程序员两年多的远程办公经验分享
    小学教育怎么选择特别容易写的论文选题?
    Codeforece 990G. GCD Counting(点分治+暴力)
    vue3+vite配置svg文件的全局使用(想怎么改颜色、宽高都可以)
    C#Regex正则表达式(Regular Expression)
    计算机是如何启动的
    服务器中了elbie勒索病毒解决办法,elbie勒索病毒解密数据恢复
    DC-2靶场渗透测试实验整理
  • 原文地址:https://blog.csdn.net/champion564/article/details/126459138
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号