| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构--排序分类、常用八大排序 -> 正文阅读 |
|
[数据结构与算法]数据结构--排序分类、常用八大排序 |
一、内部排序的一般分类1、插入排序
2、交换排序
3、选择排序
4、归并排序5、基数排序二、八大内部排序1、直接插入排序【稳定】(O(n^2))?(1)核心思想? ? ? ? 将数组中的所有元素依次跟前面已经排好的元素相比较, ? ? ? ? 如果选择的元素比已排序的元素小,则交换,再和前一个比较,直到全部元素都比较过。? ?? (2)关键:找到待排序元素要插入到已排序序列的位置【查找】 ? ?直接插入:一个个往前比和交换 ? ?二分插入:将有序列表进行二分查找,待排的为key,目标序列是已排好的序列 ? ? ? ? ? ? ??https://www.bilibili.com/video/BV1Zv411n72E?spm_id_from=333.999.0.0 ? ? 2、希尔排序(缩小增量排序)【不稳定】(O(n^1.3))? ? 找每条线段首尾两个元素中最小的,然后次小的,依次排序 ? ? ? [注]希尔排序算法是直接插入排序算法的一种改进,减少了其复制的次数,速度要快很多 3、冒泡排序【稳定】(O(n^2))? ?相邻两个比较,大的往后移,每次循环冒出一个大的,直至最后全部冒出 4、快速排序【不稳定】? ? ?每次第一个元素为参照物,大的放其后面,小的放其前面 ? ? 5、简单选择排序【不稳定】(O(n^2))? ?每次选择最小的关键字和第一个位置交换 ? ?在剩下的元素中再找最小的,再和第二个位置交换 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .... 6、堆排序【不稳定】(O(n*log(2,n)))?(1)一般步骤:?? ? ? ?数组--->完全二叉树(根左右顺序)---->从最后一个父节点调整成最大堆 (2)完全二叉树特点:? ? ? ? ? 左=根*2+1 ? ? ? ? ? 右=根2+2 (3)堆的分类:? ? ??大顶堆:父节点大于所有孩子及其子树上元素 ? ? ??小顶堆:父节点小于所有孩子及其子树上元素 ?? 7、归并排序【稳定】(O(n*log(2,n)))? 一个序列,两两归并+排序 ? ? ?第一趟:两个元素比较 ? ? 第二趟:四个元素比较 8、基数排序【稳定】(O(d(n+r)))??d-位数? n-元素个数 r-基数? (1)特点: 分配+收集 ? ? ? 分别按照个位、十位、百位、分配? ? (num/exp)%10? ?exp=10^0? 10^1? ?10^2 ? ? ? 每次分配之后收集,得到一个序列,再接着分配? ? 【总结】 ? 三、外部排序(了解)1、多路平衡归并排序(胜者树、败者树)2、置换选择排序3、最佳归并树参考总结: 数据结构常见的八大排序算法(详细整理) - 竹雨听闲 - 博客园 Java零基础自学教程之归并排序_哔哩哔哩_bilibili 《漫画算法 小灰的算法之旅》 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:28:35- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |