博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sort 快排解决百万级的排序
阅读量:5021 次
发布时间:2019-06-12

本文共 933 字,大约阅读时间需要 3 分钟。

问题:给n个整数,按从大到小的顺序,输出前m大的整数
0<m,n<1000000,每个整数[-500000,500000]
输入:
5 3
3 -35 92 213 -644
输出:
213 92 3
思路:
先按从小到大用快排排好序,然后输出排好序的数组从最后开始输出m个即可
关键:
1 已经达到千万数量级,1秒不能解决,必须用哈希,因为数字的范围达到百万级
2 哈希针对的是输入数值处于特定范围的问题,建立一个范围大小的数组,建立hash[x] = x出现多少次的映射
3 对于定义较大容量的数组,放在函数体外,这样用全局变量,内存会比较充足
4 对于区间为负的,需要设定下标补偿值

哈希排序就是桶排序:https://www.cnblogs.com/helloworld2019/p/10353265.html

快排就能解决问题:

#include
#include
#include
#define N 1000050int a[N];//当数据过大时要放在函数外面防止栈溢出int m;void QuickSort(int low,int high){int k;int i;k=a[low];int left=low;int right=high;if(left>right)return ;while(left!=right){while(a[right]
k&&left
<=left+1) QuickSort(low,left-1);else{QuickSort(low,left-1);QuickSort(left+1,high);}}int main(){int i;int j;int n;while(scanf("%d%d",&n,&m)!=EOF){for(i=0;i
View Code

 

转载于:https://www.cnblogs.com/helloworld2019/p/10451447.html

你可能感兴趣的文章
深刻理解Linux进程间通信(IPC)
查看>>
windows 7中添加新硬件的两种方法(本地回环网卡)
查看>>
javascript 高级程序设计学习笔记(面向对象的程序设计) 2
查看>>
支配集,点覆盖集,点独立集之间的联系
查看>>
SetCapture ReleaseCapture
查看>>
DataGridView ——管理员对用户的那点操作
查看>>
POJ - 1185 炮兵阵地 (状态压缩)
查看>>
ios7 JavaScriptCore.framework
查看>>
算法6-5:哈希表应用之集合
查看>>
压力单位MPa、Psi和bar之间换算公式
查看>>
Moscow Pre-Finals Workshop 2016. National Taiwan U Selection
查看>>
程序员面试、算法研究、编程艺术、红黑树4大系列集锦与总结 .
查看>>
idea tomcat 配置
查看>>
冲刺第二天
查看>>
LeetCode 405. Convert a Number to Hexadecimal (把一个数转化为16进制)
查看>>
ASP.NET MVC 3–Global Action Filters
查看>>
OFFICE安装提示1935错误
查看>>
jva基础网络编程
查看>>
js 正计时和倒计时
查看>>
复合数据类型,英文词频统计
查看>>