算法
文章平均质量分 56
PityPityPity
但行好事,莫问前程
展开
-
[共同学习] 堆排序浅见
堆排序堆的概念大根堆和小根堆完全二叉树的性质堆排序实现思路代码实现--以上--可以看看这篇博客,有图,会清晰很多:传送门 堆的概念堆通常是一个可以被看做一棵完全二叉树的数组对象,总是满足下列性质:堆中某个结点的值总是不大于或不小于其父结点的值;堆总是一棵完全二叉树。大根堆和小根堆大根堆:也叫最大堆,父结点的值总是不小于其孩子结点的值小根堆:也叫最小堆,父结点的值总是不大于其孩子结点的值完全二叉树的性质如果一棵有n个结点的完全二叉树的结点按层序编号(从0开始),则对任意结点 i(原创 2021-06-07 21:36:33 · 100 阅读 · 0 评论 -
[共同学习] 快速排序浅见
快速排序参考博客简要介绍基本思想实现思路代码实现--以上--参考博客白话经典算法系列之六 快速排序简要介绍一种不稳定排序,采用分治的策略,是对冒泡排序的一种改进。时间复杂度O(n log2n),空间复杂度O(log2n)。基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序。实现思路挖坑法:设置两个变量start=0,end=size-1,选择一个基准值key(如果选择第一个元素arr[start原创 2021-06-01 14:48:02 · 82 阅读 · 0 评论 -
[共同学习] 归并排序浅见
归并排序简要介绍基本思想实现思路代码实现简要介绍建立在归并操作上的一种稳定的排序算法,采用分治策略,时间复杂度O(n log n),空间复杂度T(n)。基本思想先使每个子序列有序,再使子序列段间有序,将已有序的子序列合并,得到完全有序的序列。实现思路先递归分解数列,再合并数列完成归并。递归分解操作:将整个元素分为两组,再将每组分为两组,以此类推,直到分出来的小组只有一个数据时,认为小组组内有序,合并相邻的两个小组。归并操作:申请空间,设置两个指针,最初位置分别为两个已将排过序序列的起始位置,比原创 2021-06-01 11:55:29 · 60 阅读 · 0 评论 -
[共同学习] 希尔排序浅见
希尔排序简要介绍基本思想实现思路代码实现--以上--简要介绍是直接插入排序的高效改进版本,又称“缩小增量排序”。非稳定排序算法,时间复杂度O(n log n)~O(n2),空间复杂度O(1),对规模非常大的数据排序不是最优选择。基本思想实质是一种分组插入方法。把元素按下标的一定增量分组,对每组使用直接插入排序算法排序,随着增量逐渐减少,每组包含的元素越来越多,当增量减至1时,整个元素被分为一组,算法结束。实现思路将所有元素看作整体,先取一个小于size的整数d1作为第一个增量,将所有距离为d1原创 2021-05-29 16:09:31 · 57 阅读 · 0 评论 -
[共同学习] 选择排序浅见
选择排序简要介绍基本思想代码实现--以上--简要介绍一种不稳定排序,时间复杂度O(n2),空间复杂度O(1)。基本思想在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾,直到所有元素均排序完毕。代码实现void SelectSort(int arr[], int size){ for (int i = 0; i < size - 1; ++i){ //交换次数,剩余最后一个元素就是最大的 int min =原创 2021-05-29 15:14:34 · 51 阅读 · 0 评论 -
[共同学习] 直接插入排序浅见
直接插入排序简要介绍基本思想实现思路代码实现关于哨兵--以上--简要介绍是一种稳定排序,时间复杂度O(n2),空间复杂度O(1)。基本思想每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置,直到所有待排序记录全部插入为止。实现思路由两层嵌套循环组成,外层循环标识并决定待比较的数值,内层循环为待比较的数值确定其最终位置。直接插入排序是将待比较的数值与它前一个数值进行比较,所以外层循环是从第二个数值开始的;当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数原创 2021-05-28 21:01:37 · 70 阅读 · 0 评论