随笔分类 -  排序

摘要:基数排序(radix sort): 对个位数先排序,再对十位数排序,以此类推。。 如果数据不满足位数相同,要对不够位数的数字前面补0(或者做类似处理)。 时间复杂度O(nk)其中n为数字个数,k为最多的数字位数。 void RadixSort(vector<int>& nums){ int maxD 阅读全文
posted @ 2020-05-14 01:09 NeoZy 阅读(402) 评论(0) 推荐(0)
摘要:输入数组A长度为n,数据范围为m1~m2。 建立一个长度m2-m1+1的数组B用做临时数组。 1.统计A中每个数字出现的次数,记录在B中。B[i]=k:A中值为i的索引一共有k处。 2.统计比A中每个数字小的数字个数,也就是统计A中每个数字应该在最终数组中排到的位置。 3.开一个结果数组C,倒序从A 阅读全文
posted @ 2020-05-09 02:04 NeoZy 阅读(180) 评论(0) 推荐(0)
摘要:用了这么久的sort,大概知道它是快排加一些其他排序组合起来的一个排序算法,今天就来捋清楚。 直接上图片: sort定义在stl_algo.h里,看起来只不过是对另一个函数的封装。 __sort函数也定义在stl_algo.h里: 可以看到它首先判断左右迭代器是否指代有效区间,如果不是有效区间就直接 阅读全文
posted @ 2020-03-18 23:25 NeoZy 阅读(500) 评论(0) 推荐(0)
摘要:学了这么久都不知道C语言有这个函数(其实是因为基本没写过C,除了学程序设计的时候。。) qsort 的函数原型是void __cdecl qsort ( void *base, size_t num, size_t width, int (__cdecl *comp)(const void *, c 阅读全文
posted @ 2020-03-18 22:44 NeoZy 阅读(268) 评论(0) 推荐(0)
摘要:题目: 链接:https://leetcode-cn.com/problems/russian-doll-envelopes/ 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样 阅读全文
posted @ 2020-02-26 12:57 NeoZy 阅读(273) 评论(0) 推荐(0)
摘要:题目: 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。 示例 1: 输入: nums = [1, 5, 1, 1, 6, 4]输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6]示例 2: 输入: n 阅读全文
posted @ 2020-02-25 12:04 NeoZy 阅读(375) 评论(0) 推荐(0)
摘要:题目: 给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ。 示例 1: 输入: nums = [1,2,3,1], k = 3, t = 0输出: true示例 2: 输入 阅读全文
posted @ 2020-02-17 15:45 NeoZy 阅读(268) 评论(0) 推荐(0)
摘要:假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是 O 阅读全文
posted @ 2020-02-17 15:42 NeoZy 阅读(125) 评论(0) 推荐(0)
摘要:问题: 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明: 你 阅读全文
posted @ 2020-02-17 13:09 NeoZy 阅读(387) 评论(0) 推荐(0)
摘要:Q: 峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞。 示例 1: 输入: n 阅读全文
posted @ 2019-08-14 15:38 NeoZy 阅读(146) 评论(0) 推荐(0)
摘要:开始想的是计数排序,但超时,如[2,999999999]这样的样例,记录数组太长,有用的占比太少。后看官方思路,用n+1(n为原数组元素个数)个桶去筛元素,每个桶能放的元素大小范围固定,即下面代码中的step,处理完后再扫描一遍当前桶最大和后继桶最小值的差,取最大差值为结果。至于为什么要n+1个桶, 阅读全文
posted @ 2019-07-13 21:41 NeoZy 阅读(147) 评论(0) 推荐(0)
摘要:放假没事干,复习复习,有空再用python写一遍 #include<iostream> #include<math.h> #include<Windows.h> #include<vector> #include<time.h> using namespace std; //冒泡排序 void Bu 阅读全文
posted @ 2019-07-05 00:51 NeoZy 阅读(129) 评论(0) 推荐(0)
摘要:更新2019年11月4日 04:26:35 睡不着觉起来寻思寻思干点啥吧,好像好久没写堆排了。于是写了个索引从0开始的堆排,这次把建堆函数略了并在heapsort主函数里,索引从0开始到size-1结束,长度size。 这个堆排和索引从1开始的堆排区别就是对于节点i,两个子节点分别为2i+1和2i+ 阅读全文
posted @ 2019-04-16 21:47 NeoZy 阅读(330) 评论(0) 推荐(0)