![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 57
随心uj
。
展开
-
[数据结构与算法] 归并排序
目录归并排序1.概念2.算法原理3.动态演示4.代码归并排序1.概念归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法,归并排序对序列的元素进行逐层折半分组,然后从最小分组开始比较排序,合并成一个大的分组,逐层进行,最终所有的元素都是有序的。2.算法原理3.动态演示4.代码void _MergeSort(int* a, int left, int right, int* tmp){ //递归终止条件 if (left >= right) { retur原创 2021-11-22 11:26:50 · 3727 阅读 · 3 评论 -
[数据结构与算法] - 快速排序
目录快速排序:动态演示:方法:版本1:hoare法版本2:挖坑法版本3:前后指针法总代码:快速排序:基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。下面介绍一下优化代码:int GetMidIndex(int* a, int left, int right){ //int mid = (left + right) / 2; int mid = left + ((right - left原创 2021-11-19 18:23:05 · 156 阅读 · 2 评论 -
[数据结构与算法] - 排序 - 直接选择排序
直接选择排序代码(瑕疵版)比如这个数组,26 2 5 3 9 4 8 5 1 7,当begin与maxi重合时,maxi就会换到后面去void SelectSort(int* a, int n){ int begin = 0, end = n - 1; int mini = begin, maxi = begin; while (begin < end) { for (int i = 0; i <= end; ++i) { if (a[i] < a[mi原创 2021-11-15 23:31:33 · 392 阅读 · 0 评论 -
[数据结构与算法] - 排序 - 希尔排序
希尔排序步骤:分组预排序,整体接近有序直接插入排序处理经过gap分组后数据的处理方式:方式一:先处理紫色组,再处理红色组,最后处理蓝色组void ShellSort(int* a, int n){ //按gap分组数据进行预排序 int gap = 3; //一组一组排 for (int j = 0; j < gap; ++j) { for (int i = j; i < n - gap; i+=gap) { int end = i; int原创 2021-11-15 22:53:20 · 547 阅读 · 0 评论 -
[数据结构与算法] - 排序 - 直接插入排序
直接插入排序当插入第 i (i>=1)个元素时,前面的 array[0],array[1],…array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较。找到插入位置将array[i]插入,原来位置上的元素顺序后移直接插入排序的特性总结:元素集合越接近有序,直接插入排序算法的时间效率越高时间复杂度:O(N^2)空间复杂度:O(1),它是一种稳定的排序算法稳定性:稳定单趟排序接下来介绍插入排序的单趟排序:比如原创 2021-11-15 22:40:28 · 634 阅读 · 0 评论 -
[数据结构与算法] - 堆排序实现
堆的一些性质图片转载链接若给定下标为 i 的节点,可得出:1.父节点下标为 ( i - 1 ) / 22.左孩子节点下标为 2 * i + 1,右孩子节点下标为 2 * i + 1思路:思路一:以插入的方法从头开始用向上调整算法进行调整默认数组第一个数已经在堆里。第二个数是56,比堆顶70要小,进行向上调整算法。第三个数是30插入到56的右子树中,但是30比56小,所以进行向上调整算法。然后以此类推。代码:#include <stdio.h>#include原创 2021-11-10 18:07:28 · 306 阅读 · 0 评论