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


    “ Ctrl AC!一起 AC!”

    目录

    排序码与关键码

    插入排序

    直接插入排序

    二分法插入排序

     表插入排序

    Shell插入排序(希尔排序)

    选择排序

    直接选择排序

    树型选择排序

    堆排序 

    交换排序

    冒泡排序

    快速排序

    快速排序

    归并排序

    基数排序


    排序码与关键码

    排序码:以此码作为比较进行排序 

    关键码:能唯一标识一个记录的字段称为关键码

    比如(可能不恰当)

    a b c d 这一序列

    排序码是它们在字母表中的顺序

    关键码是它们本身"a" "b" "c" "d"

    插入排序

    插入排序的基本方法是:将待排序文件中的记录,逐个地按其排序码值的大小插入到目前已经排好序的若干个记录组成的文件中的适当位置,并保持新文件有序。

    直接插入排序

    思路:初始可认为文件中的第一个记录已排好序,然后将第二个到第n个记录依次插入到已排序的记录组成的文件中。

    将当前待排序的元素与已排序好的元素序列作比较,若已排好序的序列的最后一个元素小于等于当前元素,则当前元素的排序结束,轮到当前元素的下一个元素排序,否则,已排好序的序列的最后一个元素往后移一位继续将当前元素与已排好序的序列的倒数第二个元素进行比较。下标为0处放一个当前元素是为了防止越界。

    二分法插入排序

    思路:在找到第i个记录的插入位置时,前i-1个记录已排序,将第i个记录的排序码key[i]和已排序的前i-1个的中间位置记录的排序码进行比较,如果key[i]小于中间位置记录排序码,则可以在前半部分继续使用二分法查找,否则在后半部分继续使用二分法查找。直到查找范围为空,即可确定key[i]的插入位置。

     表插入排序

    思路:表插入排序将在不进行记录移动的情况下,利用存储结构有关信息的改变来达到排序的目的。为此,可以给每个记录附设一个指针域 link,它的类型为整型,表插人排序的思路是,在插人第i个记录R,时,R, R2, ...... Ri-1已经通过各自的指针域link按排序码不减的次序连接成一个 (静态链)表,将记录R;的排序码key;与表中已经排好序的排序码从表头向右、或称向后依次比较,找到R,应插人的位置,将其插人在表中,使表中各记录的排序码仍然有序。

    下标0处的link域指向排好序的第一个元素,其他下标的link域指向该元素的下一个元素,最后一个元素的link域指向0

    Shell插入排序(希尔排序)

    选择排序

    思想:每次从待排序的文件中选择出排序码最小的记录,将该记录放于已排序文件的最后一个位置,直到已排序文件记录个数等于初始待排序文件的记录个数为止。

    直接选择排序

    首先从所有n个待排序记录中选择排序码最小的记录,将该记录与第一个记录交换,再从剩下的n-1个记录中选出排序码最小的记录和第2个记录交换。重复这样的操作直到剩下两个记录,再从中选出排序码最小的记录和第n-1个记录交换。

    树型选择排序

    参考:树型选择排序https://blog.csdn.net/qq_16234613/article/details/52675953?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%A0%91%E5%9E%8B%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-52675953.142%5Ev21%5Econtrol,157%5Ev15%5Enew_3&spm=1018.2226.3001.4187

    堆排序 

    参考:堆排序https://blog.csdn.net/m0_62434776/article/details/122930566

    交换排序

    思路:对待排序记录两两进行排序码比较,若不满足排序顺序,则交换这对记录,直到任何两个记录的排序码都满足排序要求为止。

    冒泡排序

    具体的做法是:第1趟,对所有记录从左到右每相邻两个记录的排序码进行比较,如果这两个记录的排序码不符合排序要求,则进行交换,这样一趟做完,将排序码最大者放在最后一个位置(即该排序码对应的记录最终应该放的位置).第2趟对前下的n-1个待排序记录重复上述过程,又将个排序码放于最终位置,反复进行n-1次, 可n-1个排序码对应的记录放至最终位置,剩下的即为排序码最小的记录, 它在第1的位置处。如果在某一趟中, 没有发生交换,则说明此时所有记录已经按排序要求排列完毕,排序结束。

    快速排序

    快速排序icon-default.png?t=M5H6https://blog.csdn.net/qq_40941722/article/details/94396010?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165603747316782184657182%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165603747316782184657182&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-94396010-null-null.142^v21^control,157^v15^new_3&utm_term=%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F&spm=1018.2226.3001.4187


    归并排序

    归并排序icon-default.png?t=M5H6https://blog.csdn.net/k_koris/article/details/80508543?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165603997416782248529922%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165603997416782248529922&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-2-80508543-null-null.142^v21^control,157^v15^new_3&utm_term=%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F&spm=1018.2226.3001.4187

    基数排序

    基数排序icon-default.png?t=M5H6https://blog.csdn.net/xiaoxi_hahaha/article/details/113186384?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165603914616782395331284%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165603914616782395331284&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-113186384-null-null.142^v21^control,157^v15^new_3&utm_term=%E5%9F%BA%E6%95%B0%E6%8E%92%E5%BA%8F&spm=1018.2226.3001.4187

    感谢阅读!!!

    “ Ctrl AC!一起 AC!” 

  • 相关阅读:
    Spring Security内部工作原理
    平衡操控应用场景和技术实现探究
    Tomcat10的坑
    机器学习的实用程序
    git常见操作
    Gin中的Cookie和Session的用法
    Java IDEA feign调用上传文件MultipartFile以及实体对象亲测可行
    ALevel商务例题解析(1)
    Java设计模式之单例模式
    【LeetCode刷题(数据结构与算法)】:二叉树之左叶子之和
  • 原文地址:https://blog.csdn.net/m0_62434776/article/details/125423247
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号