![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
文章平均质量分 78
SNAKEpc12138
这个作者很懒,什么都没留下…
展开
-
基数排序
基本思想 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。 即不需要直接对元素进行相互比较,也不需要将元素相互交换,你需要做的就是对元素进行“分配”。 具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位(或最高位)开始,依次进行一次分配。这样从最低位(或最高位)一直到最高(或最低)位的原创 2021-05-07 16:57:09 · 297 阅读 · 0 评论 -
希尔排序
基本思想 希尔排序是把序列按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量的逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个序列恰好被分为一组,算法便终止。 C++代码实现 //希尔排序 void shellSort(vector<int>& v) { for (int step = v.size() / 2; step; step /= 2) { //对每组序列进行插入排序 for (int i = step; i < v.size(); i++原创 2021-05-06 17:44:27 · 109 阅读 · 0 评论 -
插入排序
基本思想 每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止。 C++代码实现 //插入排序 void insertionSort(vector<int>& v) { int tmp = 0; int i = 1, j = 0; //从1开始比较是将第一个元素是有序的 for (; i < v.size(); i++) { tmp = v[i]; //待排序元素 j = i - 1; for (; j >= 0 &&a原创 2021-05-06 16:36:26 · 93 阅读 · 0 评论 -
归并排序
基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略。 分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之。 动画演示 C++代码 //治阶段:排序并合并分阶段拆分的序列 void merge(vector<int>& v1, vector<int>& v2, int left, int mid,原创 2021-05-06 15:01:05 · 109 阅读 · 0 评论 -
快速排序
基本思想 快速排序(QuickSort)的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 一般流程 首先设定一个分界值key,通过该分界值key将数组分成左右两部分。一般假设key 为传入的左边界值。 将大于或等于分界值key的数据集中到数组右边,小于分界值key的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值key,而右边部原创 2021-05-05 17:32:25 · 181 阅读 · 0 评论 -
选择排序
定义 **选择排序(Selection sort)**是一种简单直观的排序算法。 它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 C++代码实现 void selectionSort(vector<int>& v, int begin, int end) { int index = 0; /原创 2021-04-29 11:05:51 · 85 阅读 · 0 评论 -
冒泡排序
冒泡排序(Bubble Sort) 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 C++代码实现 从后向前相邻元素两两比较版本 从后向前两两比较,确保前面序列有序 void bubbleSort(vector<int>& v, int begin, int end) { int tmp = 0; for (int i = begin,原创 2021-04-28 17:17:29 · 221 阅读 · 0 评论