![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序
文章平均质量分 71
世_生
妥妥的一枚小白,喜欢记录学习笔记。
展开
-
排序5-计数排序
目录前言一、计数排序 前言 一、计数排序 思想:计数排序又称鸽巢原理,是对哈希表直接定址法变形的应用。操作步骤: 统计相同元素出现的个数 根据统计的结果将序列回收到原来的序列中 绝对映射: 细节: (1):当数组中的最大值较大,且数组中的最小值也较大,那么我们开辟B空间,就会有很大的浪费。 所以相对映射来了: 代码:(几处细节的处理要看仔细) void CountSort(int* a,int n) { // 选择出最大值,最小值 int i = 0,min = a[0],max = a[0]原创 2021-05-17 10:08:51 · 141 阅读 · 4 评论 -
排序4-堆排序与海量TopK问题
目录前言一、堆排序.堆排序算法二、海量TopK问题 前言 一、堆排序 (1)堆是一颗完全二叉树 (2)堆的每个节点的值都大于或等于其左右孩子节点称为大堆 (3)堆的每个节点的值都小于或等于其左右孩子节点称为小堆 堆:具备着上面条件的就称之为堆 我们可以看出大堆的堆顶是最大值,小堆的堆顶是最小值。 从堆中需要注意:跟节点一定是最大(小)者。 堆的结构: 拿上面大堆做例子:如果将大堆层序遍历存入数组,则满足以下关系 左孩子坐标=2父亲坐标+1 右孩子标=2父亲坐标+2 我们讲这个堆结构,其目的就是为了堆排序原创 2021-05-09 13:49:47 · 156 阅读 · 7 评论 -
排序3-选择排序与归并排序(递归实现+非递归实现)
目录前言一、选择排序二、归并排序递归实现迭代实现(非递归)总结 前言 一、选择排序 选择排序:指每次选择所要排序的数组中的最大(小)值的数组元素,将这个数组元素的值与最前面的没有进行排序的数组元素的值进行交换。 由于比较好理解,那么我直接上代码(改版的)最大值和最小值一起排列 void SelectSort(int *arr, int n) { for (int i = 0; i < n - 1;i++) { int maxi = i; int mini = i; for (int原创 2021-05-16 23:04:08 · 480 阅读 · 0 评论 -
排序2-冒泡排序与快速排序(递归加非递归讲解)
目录前言一、冒泡排序二、快速排序1.左右指针法2.挖坑法3.前后指针法4.快排的优化(三数取中)5.迭代实现(非递归)总结 前言 一、冒泡排序 冒泡排序:是一种交换排序,其基本思想是,两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录就为止。 当然,我们今天的主角是后面要介绍的快排,我相信朋友们对冒泡已经很熟悉了,我就简单带过一下。 代码: //冒泡排序:两个两个比较 void BubblSort(int *arr,int n) { for (int end = n; end > 0;原创 2021-05-15 16:06:16 · 561 阅读 · 11 评论 -
排序1-插入排序与希尔排序
目录前言一、插入排序二、希尔排序总结 前言 一、插入排序 直接插入排序是一种简单的插入排序法,把待排序的记录按其关键码值的大小逐个插入到一 个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 简单的来说:上图 当然,图上的方法难免有一些特例 上图:当进行到第四趟插入排序的时候 当然,开始写代码的时候,我们可以先写单趟,假设前n-1已经有序了,我们在来插入最后一个数, 然后再来写多趟,这样就可以简单写出插入排序了。当然,我这样写,是为了写下面介绍的希尔排序。 void Inser原创 2021-05-14 22:27:54 · 200 阅读 · 4 评论