| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 对十大排序算法的理解与部分代码实现 -> 正文阅读 |
|
[数据结构与算法]对十大排序算法的理解与部分代码实现 |
一、冒泡排序 说到排序算法,最先令人想到的是最简单的冒泡排序(小到大的顺序)。其原理为:从头开始,遍历当前元素和后一个元素,如果后一个比当前小,则交换,一轮遍历下来会将最大的元素置于最末尾(叫冒泡就很形象),长度为n 数组需要遍历n-1次,两个for 循环控制即可!时间复杂度为O(n^2) ? ?二、快排 快排的核心思想就是,一次遍历(一次排序)使得前半部分个数 均小于中间数,后半部分数均大于中间数,中间数一般选择最后一个数。然后对前半部分与后半部分递归使用排序函数,达到最终的排序目标,快排的时间复杂度为O(nlogn)- O(n^2) ?理解三个while ,就是理解了快排的核心 三、归并 归并的核心思想就是分割然后排序(分冶的思想): ?merge_sort 为分割函数,不断的平均分割然后用merge 函数实现融合(merge 函数的实现思路不难,但要注意其实现过程)!时间复杂度为O(nlogn) 四、插入排序 和冒泡排序很像,从第二个元素开始,当前元素与前一个元素比较,小则交换,大则不变,依次下去直到最后一个元素 五、选择排序 每次在序列中找出最大的元素(max()方法),放在最后面,依次在剩余序列中重复,时间复杂度为O(n^2) 六、希尔排序 和增量序列排序有关,比如增长序列的值选择1,则需要分别排序奇数位置和偶数位置的序列。依次,希尔排序为一种非稳定排序算法 七、堆排序 先将序列化为二叉树,然后如果是最大堆排序则保证父节点值大于孩子值,从下往上确定有序区域 八、桶排序 将序列通过桶函数映射到桶中,桶是有序的,桶中元素再进行排序,最后输出为桶(桶中有序元素)的顺序!桶排序的复杂度取决于桶函数的选择 九、基数排序(LSD、MSD) 就是将排序元素分割成个位、十位、百位等,LSD为先低位排序、MSD为先高位排序 十、计数排序 计数排序为比较排序算法中最快的,如果一个数,在序列中有n个比其小的数,其位置应为n+1,类似于这样。时间复杂度为O(n),但缺点是需要开辟额外的存储空间! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/25 21:49:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |