排序算法
zhapeng1
这个作者很懒,什么都没留下…
展开
-
数据结构-堆和堆排序 C++实现
为什么使用堆堆的主要用途是在处理优先队列上,相比于普通队列的先进先出,后进后出,优先队列出队顺序和入队顺序无关,只和优先级有关。比如头等舱登机就比普通乘客先登机,而和先来后到没有关系。但是有人会说我把数组先进行排序再处理呗,但是现实生活中往往是需要进行动态处理的,如果每次有新元素都要进行重新排序,那处理起来是十分复杂的。此时使用堆的数据结构处理速度会有一定的提升。通过对比可以看出,虽然使用堆在入队和出队都不是最优,但是在同时出入队就会有较好的性价比。如何实现堆从上可以看出堆的时间复杂度为O(log原创 2020-06-15 16:29:19 · 426 阅读 · 0 评论 -
排序算法-快速排序(快排、双路快排、三路快排)(2)C++实现
双路快排看完快速排序后,有人肯定会有一丝丝疑惑,刚刚的快速排序好像并没有考虑元素=v=v=v的情况。其实对于=v=v=v的情况很简单,只要在之前的partition过程中将>>>改为>=>=>=或者<<<改为<=<=<=。但是如果这么简单,那也没有必要单独写了。问题就在如果一个数组重复数字比较多,那么partition操作后的两个数组就会出现之前的不均衡的情况。所以如果重复数字较多的话,快速排序就会退化至O(n2)O(n^2)O(n原创 2020-06-09 21:32:42 · 342 阅读 · 0 评论 -
排序算法-归并排序及改进 C++实现
归并排序是一个复杂度为O(nlogn)的算法,一般出现复杂度有logn的情况,都是采用了一种类似树形结构的方法。原理归并排序将数据如下图不断二分,如果分开的部分已经排好序,那么只需要将这两个部分合并即可。但是如果分到最后一层,那么只有一个数据就是排好序的,将所有的数据网上归并即可。分完层之后就是对数据进行归并处理,这个问题看起来很简单,但是细细想来还挺复杂的。因为只对原数组进行操作并不能达到目的,此时需要另外开辟一个空间进行辅助操作。这也就是说插入排序需要额外使用O(n)的空间复杂度。开辟了额原创 2020-06-06 23:27:25 · 862 阅读 · 0 评论 -
排序算法-插入排序 C++实现
插入排序算法也是一个复杂度为O(n^2)的排序算法,它的原理跟打扑克类似。在打扑克时,每摸到一张牌我们都会把它插入到手上扑克中的正确位置。那么在排序中就是进行两重循环,第一重循环遍历数组,第二重循环将当前元素插入到之前元素中合适的位置。给一组图片演示加深理解对于第一个元素因为之前没有元素,不需要插入操作。对于第二个元素,跟前面的元素依次相比,6小于8,将6和8交换位置。下面也是同理,第三个元素依次与之前的元素比较,将其插入到合适位置。insertSelection(T arr[], int原创 2020-06-05 17:44:20 · 211 阅读 · 0 评论 -
排序算法-选择排序 C++实现
选择排序是排序算法中最为简单的一种,当然复杂度也是比较高的,为O(n^2)。但是最容易想到,所以先从选择排序开始。排序算法的思想主要是利用两重循环,第一重循环确定当前排序到达的位置,第二重循环寻找对应的元素。以从小到大排序为例,从第0个数据开始,向后寻找最小的元素,并将其位置指定为minIndex,与第0个数据交换即可。所以可以写出如下代码#include <iostream>#include <algorithm>using namespace std;void原创 2020-06-04 18:16:32 · 273 阅读 · 0 评论