![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
快速掌握常用算法入门基础知识并可以简单的使用
一杆梅子酒丶
这个作者很懒,什么都没留下…
展开
-
海量数据问题解决思路
1.给定100亿个整数,设计算法找到只出现一次的整数?分析:100亿个整数大概占用40G内存空间数据出现的次数分为3种:出现0次、出现1次、出现2次及以上使用位图来解决问题,两个位表示一个整数:00、01、102.给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?方案一:将其中一个文件的整数映射到一个位图中,读取另外一个文件的整数,判断在不在位图中,在就是交集,消耗500M内存。方案二:将其中一个文件的整数映射到一个位图中,将另外一个文件的整数映射到另外一个位图中,然后原创 2020-08-21 11:27:18 · 533 阅读 · 1 评论 -
排序算法:计数排序(C实现)
基本思想计数排序(Count Sort)是一个非比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,复杂度为O(Max(Range, N))(其中Range是整数的范围),快于任何比较排序算法。计数排序的思想类似于哈希表中的直接定址法,在给定的一组序列中,先找出该序列中的最大值和最小值,从而确定需要开辟多大的辅助空间,每一个数在对应的辅助空间中都有唯一的下标。找出序列中最大值和最小值,开辟 max - min + 1的辅助空间最小的原创 2020-07-22 17:29:35 · 397 阅读 · 0 评论 -
排序算法:归并排序(C实现)
基本思想归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序核心步骤:C/C++代码实现特性总结归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。时间复杂度:O(N*logN)空间复杂度:O(N)稳定性:稳定.原创 2020-07-22 17:29:11 · 109 阅读 · 0 评论 -
排序算法:快速排序(C实现)
基本思想过程分析首先我们需要选定一个 key值,通常情况下是用 arr[begin] 或者 arr[end] 作为 key值的。但是在一些特殊情况下还不是很好,因为选取的 key值可能偏大或者偏小。因此可以用三数取中法选择 key值,判断 begin、end、middle的大小,从上图中可以看到...原创 2020-07-22 10:53:14 · 263 阅读 · 0 评论 -
排序算法:冒泡排序(C实现)
基本思想冒泡排序是排序算法的入门算法,算法思想是每次把最大的数字沉底,完成一趟排序后就可以发现最大的数字被沉底了,然后第二趟第二大的数字也沉底了,就这样依次类推完成排序。过程分析从前向后依次比较排序:分析上面过程,可以发现第4、5、6趟的比较并没有意义,它们实际上已经是有序的。因此在写代码的过程中,我们可以进行一定的优化,提高排序的效率。C/C++代码实现void Swap(int* x, int* y){ int tmp = *x; *x = *y; *y = t原创 2020-07-22 10:52:19 · 232 阅读 · 0 评论 -
排序算法:堆排序(C实现)
基本思想堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆。过程分析我们先将上面的数字按照堆的形式展现出来:以最后一棵小子树开始构建大堆,也就是下面蓝框选中的部分把31拿出来和子树比较,因为该树只有左子树,所以只需要和左子树进行比较,发现1比31小,所以无需交换,然后换至下一棵树。因为是倒叙构建才能不断把数字大的往上浮,所以下一棵树是以3号下标为根的子树,也就是下面蓝原创 2020-07-17 17:18:15 · 322 阅读 · 0 评论 -
排序算法:直接选择排序(C实现)
基本思想每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。过程分析在元素集合 array[i]–array[n - 1] 中选择关键码最小的数据元素若它不是这组元素中的第一个元素,则将它与这组元素中的第一个元素交换在剩余的 array[i + 1]–array[n - 1] 集合中,重复上述步骤,直到集合剩余1个元素实际上,我们还可以对上述排序过程进行优化:一次选两个数,最小的放第一个位置,最大的放最后一个位置C/C++原创 2020-07-17 17:18:01 · 693 阅读 · 0 评论 -
排序算法:希尔排序(C实现)
基本思想:希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数 gap,把待排序的所有数据分成 gap个组,所有距离为 gap的数据分在同一组内,并对每一组内的数据进行排序。然后重新选定一个整数 gap,重复上述分组和排序的工作。当到达 gap=1时,所有数据在统一组内排好序。一般情况下,第一次选择的 gap = n / 3 + 1,之后每次选择的 gap = gap / 3 + 1。+1 的目的是为了保证最后一次 gap = 1。实际上前面的分组排序是为了让数据相较于初始未排序的时候更加有原创 2020-07-17 13:25:29 · 373 阅读 · 0 评论 -
排序算法:直接插入排序(C实现)
基本思想:直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。实际中我们玩扑克牌时,就用了插入排序的思想当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…array[0]的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的原创 2020-07-17 13:24:47 · 177 阅读 · 0 评论