![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 69
☞L★X☜
这个作者很懒,什么都没留下…
展开
-
看了这个你就会快排了!
看了这个你就会快速排序了! 快速排序:(C++版) 完整代码在后文!!! 挖坑法:(递归) 思想: 1、先设定一个基准数,一般取数组的第一个数做为基准数。 2、设置两个变量,left和right,让left指向数组第一个数,right指向数组的最后一个数。即left = 0;right = n - 1; 3、right一直向前走,直到找到一个比基准数小的数,将right目前指向的数赋值给left目前指向的数。 while(left < right && ar[right] > t原创 2021-03-30 23:24:10 · 107 阅读 · 2 评论 -
排序算法之——二路归并排序
排序算法之——二路归并排序 二路归并排序的思想: 一次排序过程,将已经各自有序的两个段的数据合并一个段,并且合并后依旧有序 开始,我们认为单个数据是有序的,一个数据就是一个段,一次排序之后,两个数据就是一个有序数据段,这样下一次每个数据段就是两个数据。最后将其合并成一个完成有序段,则整个数据就已经排序好了 时间复杂度: O(nlog(n)) 空间复杂度: O(n) 稳定性: 稳定 代码实现: void Meger(int* arr, int len, int width, int *brr) { int原创 2020-11-22 20:34:47 · 1011 阅读 · 0 评论 -
排序算法之——快速排序
排序算法之——快速排序 快排的思想: 1、先在数据中找一个基准数据:一般为待排序数据的第一个,或者随机数,三位数取中 2、将数据按照基准数据分为两部分,前一段都比基准小,后一段都比基准大。 3、按照同样的思想分别处理前一段和后一段数据。 按照一个基准数据,将待排序数据段分成两部分: 数据段为start到end之间的数据。先将基准数据(start位置)保存到tmp中,i = start; j = end。在i < j 的时候,重复执行以下两个过程: 1、通过j从后往前找第一个比基准数据小的数据,找到后原创 2020-11-19 18:25:26 · 111 阅读 · 0 评论 -
排序算法之——希尔排序shellsort
排序算法之——希尔排序 算法原理: 1、先将数据分为d个组,在每一组数据中使用直接插入排序算法来进行排序。void Shell 先比较同组前两个数据,再比较比较之后的同组的后两个数据 2、接着继续将数据分组(分组数越来越小),最后一次分组肯定为1,每一个分组数一般是互质的(5,3,1) void ShellSort 目的: 使得整个数据越来越有序 时间复杂度: O(n^1.3 --1.5) 空间复杂度: O(1) 稳定性: 稳定 代码实现: void Shell(int* arr, int len原创 2020-11-16 21:08:33 · 81 阅读 · 0 评论 -
排序算法之——直接插入排序
排序算法之——直接插入排序 算法原理: 将数据分成两部分,前一段是已经有序的数据(初始时,前一段数据只有一个),后一段是无序的数据。从无序数据中拿一个数据(左边第一个数据),插入到前一段的有序数据中,使有序数据依旧有序。 时间复杂度: O(n^2) 空间复杂度: O(1) 稳定性: 稳定 思路图示: 代码实现: void InsertSort(int* arr, int len) { for (int i = 1; i < len;++i)//i负责遍历无序数据段 { int tmp =原创 2020-11-16 19:35:32 · 75 阅读 · 0 评论 -
排序算法之——选择排序
排序算法之——选择排序 算法原理: 1、先遍历一遍整个待排序数据,找到当前最大数据的位置 2、将最大数据标记,与当前最后一个位置元素做交换 3、重复1、2步骤,直到只剩一个数据 4、上述的步骤每遍历一遍,下一次就少遍历一次数据 时间复杂度: O(n^2) 空间复杂度: O(1) 稳定性: 因为是将最大数据直接和最后一个数据做交换,所以不稳定 代码实现: void SelectSort(int* arr, int len) { for (int j = 0; j < len - 1; ++j)原创 2020-11-16 16:20:14 · 56 阅读 · 0 评论 -
排序算法之——冒泡排序
排序算法之——冒泡排序 冒泡排序因其在排序中相邻元素不断交换,一些元素被换到后面,看起来像元素在冒泡一样而得名。 算法原理: 冒泡排序的原理(以递减为例)是每次从头开始比较相邻的元素,如果后面的比前面的小,则交换。循环完毕后再次从头扫描,直到某次扫描没有元素可交换,程序完成。 时间复杂度: O(n^2) 空间复杂度: O(1) 稳定性: 没有发生隔几个的数据交换,所以稳定 代码实现 void BubbleSort(int* arr, int len) { for (int i = 0; i < le原创 2020-11-16 16:08:41 · 420 阅读 · 0 评论