找出无序数组最小的K个数(基于快排,效率高)
快排:
void QuickSort(int array[], int low, int high)
{ if (low >= high) //为了防止无限递归下去,导致栈溢出,设置此条件 { return; } int pivotkey = array[low]; //设置一个对照元素,把这个元素先暂时拿出来,想象它的位置的左边都比它大,右边都比它小,空出位置用来存放比对照元素小的元素 int iLow = low; int iHigh = high; while (low < high) { while (low < high && array[high] <= pivotkey) { high--; } array[low] = array[high]; //从右边往左边找,直到找到一个比对照元素要大的元素,放到对照元素的前面 while (low < high && array[low] >= pivotkey) { low++; } array[high] = array[low]; //然后从左往右找,直到找到一个比对照元素要小的元素,放到对照元素的后面 } array[low] = pivotkey; //最后在中间放置对照元素,这时候左边的数据都比大的数据,右边的数据都是小的数据 QuickSort(array, iLow, low - 1); //对照元素左边的数据再次进行以上排序 QuickSort(array, low + 1, iHigh); //对照元素的右边数据再次进行以上排序
}
找出最小的K个数
#include <iostream>
using namespace std;void swap(int *a, int *b)
{int temp = *a;*a = *b;*b = temp;
}
void GetLeastNumbers_Solution(int input[],int start, int end, int k) {int key = input[0];int left = start;int right = end;while(left < right){while(left < right && key <= input[right])--right;swap(&input[left], &input[right]);while(left < right && key >= input[left])++left;swap(&input[left], &input[right]);}if(left+1 < k)GetLeastNumbers_Solution(input, left+1, end, k-left-1);if(left+1 > k)GetLeastNumbers_Solution(input, start, left-1, k);
}int main()
{int k = 4; int arr[] = {4,5,1,6,2,7,3,8};GetLeastNumbers_Solution(arr, 0, 7, k);for(int i = 0; i < k; ++i){cout<<arr[i]<<" ";}return 0;
}
找出无序数组最小的K个数(基于快排,效率高)相关推荐
- 算法导论:快速找出无序数组中第k小的数
题目描述: 给定一个无序整数数组,返回这个数组中第k小的数. 解析: 最平常的思路是将数组排序,最快的排序是快排,然后返回已排序数组的第k个数,算法时间复杂度为O(nlogn),空间复杂度为O(1). ...
- 整数无序数组求第K大数(暴力|快排) - 滴滴出行2018校园招聘内推笔试-研发工程师
时间限制:1S 空间限制:32768K 题目描述: 给定无序整数序列,求第K大的数,例如{45,67,33,21},第2大的数为45 输入描述: 输入第一行为整数序列,数字用空格分割,如:45 67 ...
- 典型的Top K算法_找出一个数组里面前K个最大数
原文 典型的Top K算法_找出一个数组里面前K个最大数...或找出1亿个浮点数中最大的10000个...一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入 ...
- 找出一个数组里面前K个最大数
前言:今天早上来实验室,同桌问了我一个问题:找出一个数组里面前K个最大数的高效算法.最近正好在看数据结构和算法相关内容,便以己之力帮她思考了思考. 问题:找出一个数组里面前K个最大数. 解法: 1.第 ...
- 找出无序数组中最小的k个数(top k问题)
2019独角兽企业重金招聘Python工程师标准>>> 给定一个无序的整型数组arr,找到其中最小的k个数 该题是互联网面试中十分高频的一道题,如果用普通的排序算法,排序之后自然可以 ...
- 程序员面试金典 - 面试题 17.14. 最小K个数(快排划分O(n))
1. 题目 设计一个算法,找出数组中最小的k个数.以任意顺序返回这k个数均可. 示例: 输入: arr = [1,3,5,7,2,4,6,8], k = 4 输出: [1,2,3,4]提示: 0 &l ...
- 373. Find K Pairs with Smallest Sums 找出求和和最小的k组数
[抄题]: You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. D ...
- 程序员编程艺术:第三章、寻找最小的k个数
程序员编程艺术:第三章.寻找最小的k个数 作者:July. 时间:二零一一年四月二十八日. 致谢:litaoye, strugglever,yansha,luuillu,Sorehead,及狂想曲创作 ...
- 在哪里能收到python实例代码-Python找出最小的K个数实例代码
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复 ...
最新文章
- 开源实时日志分析ELK
- 【云中沙箱】视频直播技术浅析与实践!
- 内核功能导致重启_诊断修复 TiDB Operator 在 K8s 测试中遇到的 Linux 内核问题
- python实现二叉堆中的大顶堆(大根堆)
- mysql illegal mix of_mysql字符集问题:Illegal mix of collations
- 关于 HANA CE Function
- TinyUI组件开发示例
- 我在华为做Android外包的真实经历!吊打面试官系列!
- VC 系统托盘 气泡提示
- 10.30完美笔试题
- 【js类库AngularJs】解决angular+springmvc的post提交问题
- win32收不到F10按键消息解决的方法
- export default 和 export 的使用方式(六)
- Waveform Audio 驱动(Wavedev2)之:WAV API模拟 1
- react antd select默认选中第一项
- Itunes降级(卸载+安装)+苹果软件降级安装(爱思+ITunes)
- 【电信学】【2019.07】基于ATOLL的5G网络规划与优化
- HTTP headers 详解 headers 常用属性
- centos官网下载地址
- 图像处理公共数据库下载地址集锦