O(n)时间复杂度求最小的k个数和第k小的数
来源:互联网 发布:php base64 自定义key 编辑:程序博客网 时间:2024/04/19 21:43
//思路:使用快速排序的patition函数来进行处理 时间复杂度为O(n)#include<iostream>#include<cassert>using namespace std;int partition(int *ar, int len, int low, int high){int temp = ar[low];while(low < high){while(low < high && temp < ar[high]){high--;}if(low == high){break;}else{ar[low] = ar[high];}while(low < high && temp > ar[low]){low++;}if(low == high){break;}else{ar[high] = ar[low];}}ar[low] = temp;return low;}int findkmin(int *ar, int len, int k)//寻找第k小的数{assert( (ar!=NULL) && (k>0) && (k<len+1) );int low = 0;int high = len - 1;int index = partition(ar, len, low, high);while(index != k-1){if(index > k){index = partition(ar, len, low, index-1);}else{index = partition(ar, len, index+1, high);}}return ar[index];}void findkmin(int *ar, int len, int k, int *retar)//寻找最小的k个数{assert( (ar!=NULL) && (k>0) && (k<len+1) && (retar!=NULL));int low = 0;int high = len - 1;int index = partition(ar, len, low, high);while(index != k-1){if(index > k){index = partition(ar, len, low, index-1);}else{index = partition(ar, len, index+1, high);}}for(int i = 0; i<=index; ++i){retar[i] = ar[i];}}void show(int *ar ,int len){for(int i=0; i<len; ++i){cout<<ar[i]<<" ";}cout<<endl;}int main(){int ar[] = {7,3,5,6,4,1,2};int retar[32];int len = sizeof(ar)/sizeof(ar[0]);int len2 = sizeof(retar)/sizeof(retar[0]);cout<<findkmin(ar, len, 7)<<endl;cout<<findkmin(ar, len, 1)<<endl;cout<<findkmin(ar, len, 5)<<endl;//cout<<findkmin(ar, len, 0)<<endl;//cout<<findkmin(ar, len, 8)<<endl;findkmin(ar, len, 7, retar);show(retar, 7);findkmin(ar, len, 1, retar);show(retar, 1);findkmin(ar, len, 5, retar);show(retar, 5);return 0;}
0 0
- O(n)时间复杂度求最小的k个数和第k小的数
- 求第k小的数 O(n)复杂度
- 寻找最小的k个数 时间复杂度 O(n*k)
- soj3102 O(n)求第k小的数
- o(n)时间寻找第k小的数
- 无序序列中O(n)时间复杂度寻找最小(最大)的K个数
- 寻找 最小的k个数 线性选择算法 平均时间复杂度 O(n)
- 寻找数组中第k小的数:平均情况下时间复杂度为O(n)的快速选择算法
- 求数组中第k小的数,或者最小的k个数
- 从俩个有序数组中找出第K小的数。要求时间复杂度O(logmin(m,n))
- 已知数组A[1...n] ,确定第K小元素 算法的时间复杂度O(n)
- 求N个数中最小的K的数 O(NlogK)
- 求数组第k小的元素 要求复杂度在O(n)
- O(n)时间求最接近中位数的k个数
- O(n)时间求最接近中位数的k个数
- 找出N个数中最小的k个数问题(复杂度O(N*logk))
- 堆处理海量数据----求前k个最小的数--时间复杂度(n * log k)
- 从给定的N个数中得到满足K数的所有数字,时间复杂度O(n)
- 顾静人体宴问饿反而更都挺好
- Java中的反射技术
- 学会
- 博客搬家至lizhuolun.com
- smarty section语句遍历数组
- O(n)时间复杂度求最小的k个数和第k小的数
- 统计分析学习
- 爱情在那里学习的了呢
- POJ 2140 解题报告
- mongodb内嵌设计
- 阿里八八的最新概要是什么
- Hearbleed Hacking In Kali-linux
- 归并排序
- mySQL 视图、存储过程、流程控制实例