排序
Wavesgf
这个作者很懒,什么都没留下…
展开
-
排序实现与分析-- 堆排序
堆排序 描述 说实话,描述这一块一点头疼,感觉我会说的很乱,但我尽力0.0; 堆排序,又是一个性能很棒的排序这个排序,我个人感觉好高级,速度很快,但是原理要烦躁一些,下边我们慢慢来说。 如下是我们这次的待排序数据: 我们把它换成树的样子,就变成了这样: 这里我们黑色是数据,红色代表他在原数据中的索引,也就是下标,这是未调整的初始状态,接下来我们打断一下,说另一点,堆的问题: 堆有大根堆和小根堆,大根堆就是指整个树中,所有的父节点的值都比孩子节点值大即为大根堆,反之则为小根堆,示例我们下图中“ 7,2,4原创 2020-09-10 16:54:46 · 133 阅读 · 0 评论 -
排序实现与分析 -- 选择排序
选择排序 描述 选择排序,也是一个很简单易实现的算法,顾名思义,选择即选出符合要求的数据,然后排序。 大概过程如图: 待排序数据“ 5,3,9,1,6 ” 第一趟:设5为最小值,然后再后边序列选择出比5小的最小值,然后跟5交换; 第二趟:设3为最小值,在后边序列找出比3小的最小值,然后跟自己交换; 第三趟:设9为最小值,在后边序列找出比9小的最小值,然后跟自己交换; 第四趟:设9为最小值,在后边序列找出比9小的最小值,然后跟自己交换; 最后只剩一个数据,即在最后为最大值,五个数据跑四趟,每趟开头多一个有序原创 2020-09-09 14:38:10 · 94 阅读 · 0 评论 -
排序实现与分析 -- 快排
快速排序 描述 快速排序,是一个很重要的排序算法,当然其平均性能也比较高,他的思想我借鉴纪磊在啊哈算法中的形容来描述。 在快排中,我们把待排序数据(如上图)中的第一个数据拿出来,称他为基准,就是拿接下来的数字都跟他进行比较,如下图所示,我们假设有两个炮兵(此处红五角星标识),一个在数据的最左边,一个在数据的最右边,刚开始我们右炮兵拿起他的数字7跟基准比,此数字大于基准6,所以炮兵往前走,9大于6,再往前走,3小于6,找到第一个小于基准6的数字,把3放到基准原位置,然后左炮兵往后找,5、4、1、2小于6,炮原创 2020-09-08 19:02:06 · 103 阅读 · 0 评论 -
排序实现与分析 -- 冒泡
冒泡排序 描述 冒泡排序算是比较简单的排序了,原理简单易实现。 顾名思义,冒泡,将某个数据像冒泡一样“冒”在最高处,在排序过程中就像冒泡一样,每一趟将一个最大值“冒”到最后,然后下一趟。 如下数列举例: 6、5比较,6大于5,交换;6、7比较,6小于7,不交换;7、1比较,7大于1,交换,第一趟结束,结果如下: 7有序,再从头开始,5、6比较,5小于6,不交换;6、1比较,6大于1交换,结果如下: 6、7有序,5、1比较,5大于1,交换,结果如下: 最终1自我有序,最终结果: 代码实现 void原创 2020-09-08 17:47:46 · 73 阅读 · 0 评论 -
排序实现与分析 -- 希尔排序
希尔排序 按理解的话,其实希尔排序就是插排的升级版,他的思想是:对需要排序的数据进行分组,通过每组的插排使得组内有序,从而整体接近有序,此时对整体进行插排就很快(在插排中说过,插排,数据越有序速度越快) 但是要注意的一点是,分组不是常规的认为那样分组(如上所示),上图在红蓝组内有序后,整体数据如下 如此一看,整体并非有序,所以应该如下进行分组 组内有序后 ,整体如下 整体接近有序,达到要求希尔排序是结合了一定的数学问题的,数学问题给出了分组的方式,原理这里不做探讨,给出,尽量以素数分组,且最后一次分原创 2020-09-08 13:28:07 · 114 阅读 · 0 评论 -
排序实现与分析 -- 插排
插入排序 思想 插入怕排序是一种简单的排序方法,他的基本操作是将一个数据插入到已有序的序列中,从而得到序列数加一的新的序列 插入排序中,我们先将最初始的有序序列数定为第一个数字,即在下列数据中为1,从第二个开始,当前有序列为“1” 5和有序序列从头开始比较,发现5应该在1的后边,所以新的有序序列为“1,5” 然后第三个数字3,和有序序列从头开始比较,发现3应该在1后边,所以我们把1后边的数据后移腾开位置,将3插入进来,此时有序序列为“1,3,5” 第四个数字6,比较后找到位置,插入到5之后,新的序列原创 2020-09-07 15:49:37 · 314 阅读 · 0 评论