| |
|
开发:
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.排序依据原则
二.排序算法思想叙述与实现?1.插入排序
? ? ? ? 直接插入排序,是一种串行的比较排序算法,常用的思路是在数组a[n] 的第一个元素作为“哨兵”的形式,通过比较大小从而确定位置进行排序。 基本思路:1.将待排序的元素存入到哨兵位置(从第二个位置起);2.通过与非哨兵的其他位置进行顺序比较确定排序位置;3.将此位置放到待排序的位置,将哨兵插入到此位置。结合下图进行理解。 ?代码实现:
总结:
? ? ? ? 折半插入算法,对直接插入算法的一种改进,将查找正确位置的时候,通过折半查找的方法进行,从而减少查找的时间,提高算法的插入效率。 算法思路:1.将待排序的元素存入到哨兵位置(从第二个位置起);2.通过折半查找的方法进行确定放置的位置;3.将此位置放到待排序的位置,将哨兵插入到此位置。 算法实现:
?总结:
? ? ? ? 希尔排序,是一种不稳定的排序算法,通过特定的函数来确定位置,从而插入到序列中。 算法思路:1.将待排序的序列分割成若干子序列;2.分别进行直接插入排序;3.全体记录进行一次全部插入排序。结合下图进行理解。 代码实现
总结: ? 2.交换排序
? ? ? ? 冒泡排序,最常见的排序算法之一,通过想煮水时冒泡那样子,从下面小到最上面大(反之亦然),通过不断的元素交换位置从而来确定最后的位置,每一趟必有一个元素确定位置。 算法思路:1.确定元素排序顺序;2.通过一个一个比较交换找到最大的放最后,再进行下一轮比较;3.排序n个元素传统算法需要n-1趟遍历交换。下面的代码实现是,添加了一个标志位,如果往后的元素都是顺序了,就不用再进行后面趟次的交换了。 代码实现:
总结:
? ? ? ? 快速排序,快速排序通过选择一个中枢元素,然后数组进行分组,将大的放后,小的放前,然后再对大小两个组再进行同样的操作,运用递归的思想将数组不断地进行分组有序排序。 算法思路:1.任取一个元素(如:第一个)为中心pivot;2.使用两个指针,low?一个指向最前面的元素,high?一个指向最后面的元素,对low值与pivot进行比较,若是小则往后移动,若是大于,则对high值跟pivot进行比较,若是大于则往前移动,若是小于则与low值进行交换,再重复这一操作,直到low = high则停止;3.进行递归分组,直到low = high; 代码实现:
?总结: 3.选择排序
? ? ? ? 简单选择排序,近似于打擂台的方法,设置一个元素默认为最小或最大,通过将其他元素跟其进行比较,从而选择到比它小的进行交换,有多少元素就进行多少趟的比对选择。 算法思路:1.选定一个元素为擂主;2.对其他元素通过与其进行比较从而选择元素进行交换位置;3.多趟进行交换。 代码实现:
总结:
? ? ? ? 堆排序,是先进行堆建立,然后将元素通过堆的定义插入到堆中,并对堆不断调整后,成为一个大根堆或者小根堆。 算法思路:1.建立堆,将元素放置堆顶,然后再放入第二个元素,若是比它小则接入到孩子结点,若比它大则它成为顶点,顶点成为孩子结点。不断重复从而建立堆。2.堆排序,输出堆顶元素,在将叶子结点放到堆顶,再对堆顶元素跟其底下结点进行比较换位,从而是的每次输出的堆顶元素都为最大的。 代码实现:
?总结: ? 4.归并排序? ? ? ? ?归并排序是对几个数组进行归并,通过数组中的排序,再进行数组与数组间的排序,从而将数组归并排序成一个数组。用以下图理解即可。代码需要具体问题具体分析。? 5.基数排序? ? ? ? 基数排序,最主要的思想是进行分配+收集。其算法思想是设置若干个箱子,将关键字为k的记录放入第k个箱子,然后按序号将非空的连接。结合如下图理解即可。 ? ? ?三.算法对比和总结 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 19:36:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |