![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序
文章平均质量分 62
zadarmo_
这个作者很懒,什么都没留下…
展开
-
【排序】快速排序
重点在于第二步上。做法是:在区间[l, r]中,指定两个指针i、j。当i和j停下来的时候,说明x[i] >= a,x[j] = x[j]。那根据我们的想要实现的目的,要保证左边 = a,也就是x[i]原创 2024-03-17 11:35:53 · 730 阅读 · 0 评论 -
【AcWing】AcWing 5180. 正方形泳池(秋季每日一题2023)(排序 + 边枚举边更新)
有时候排序可以帮助我们从暴力枚举的思路里解脱出来边枚举边更新是一个很重要的思想。原创 2023-09-07 13:08:58 · 161 阅读 · 0 评论 -
leetcode 347:前K个高频元素(桶排序)
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], k = 1 输出: [1] 说明: 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。 思路:...原创 2020-01-23 11:49:56 · 273 阅读 · 0 评论 -
归并排序
核心:有序子列的归并 扫描A、B两个数组,把小的往C数组里面放。T(n)=O(n) /* c为临时数组,l为左边起点,r为右边起点,rightend为右边终点 */ void Merge(int a[],int c[],int l,int r,int rightend) { leftend=r-1;//左边终点 k=l;//存放结果的临时数组的起始位置 num=rightend-l+1;...原创 2019-08-14 20:10:30 · 75 阅读 · 0 评论 -
冒泡排序、插入排序、选择排序
冒泡排序(以从小到大为例,下同) 从起始索引开始,每次和后面元素的比较,如果比后面大就交换; 每完成一次遍历,最后一个一定最大,所以第二只用遍历到倒数第一个,以此类推; 优化:如果在一次遍历过程中没有发生交换,说明排序完成,直接退出。 T(n)=O(n²) int a[100],i,j,n;//索引从1开始 int flag=0;//是否发生交换 for(i=1;i<=n;i++) { ...原创 2019-08-14 18:34:07 · 72 阅读 · 0 评论 -
堆和堆排序
堆是一种优先队列,堆有两个特性: 结构性:用数组表示的完全二叉树; 有序性:任一结点的关键字是其子树所有结点的最值。如果是最大值,则成为最大堆;如果是最小值,称为最小堆。 基于第一个特性,可以用一个一维数组去存这个堆,起始下标为1。 对于堆的操作,下面只给出最大堆的插入和删除的操作。 插入元素 如图所示: 其主要思想是: 先将元素放入数组的最后一个位置 将这个元素进行向上调整 代码如下...原创 2019-08-04 17:24:05 · 156 阅读 · 0 评论