无序n个元素中,寻找第K大的元素 O(n)
来源:互联网 发布:淘宝势力周多久一次 编辑:程序博客网 时间:2024/04/30 14:04
#include <stdio.h>
void swap(int *a,int *b){
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
int partition(int arr[],int left,int right,int pivotIndex){
int storeIndex = left;
int pivotValue = arr[pivotIndex];
int i;
swap(&arr[pivotIndex],&arr[right]);
for(i=left;i<right;i++){
if(arr[i]>pivotValue){
swap(&arr[i],&arr[storeIndex]);
storeIndex++;
}
}
swap(&arr[storeIndex],&arr[right]);
return storeIndex;
}
int findKMax(int arr[],int left,int right,int k){
int nRet;
int pivotIndex = left + 1;
nRet = partition(arr,left,right,pivotIndex);
if(nRet < k){
return findKMax(arr,nRet+1,right,k);
}
else if(nRet > k){
return findKMax(arr,left,nRet-1,k);
}
return nRet;
}
int main(){
int i,k,nRet;
int arr[] = {8,3,4,1,9,7,6,10};
scanf("%d",&k);
nRet = findKMax(arr,0,7,k-1);
printf("The Kth Max Number locate in %d and the value is: %d\n",nRet,arr[nRet]);
for(i=0;i<8;i++){
printf("%3d ",arr[i]);
}
return 0;
}
void swap(int *a,int *b){
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
int partition(int arr[],int left,int right,int pivotIndex){
int storeIndex = left;
int pivotValue = arr[pivotIndex];
int i;
swap(&arr[pivotIndex],&arr[right]);
for(i=left;i<right;i++){
if(arr[i]>pivotValue){
swap(&arr[i],&arr[storeIndex]);
storeIndex++;
}
}
swap(&arr[storeIndex],&arr[right]);
return storeIndex;
}
int findKMax(int arr[],int left,int right,int k){
int nRet;
int pivotIndex = left + 1;
nRet = partition(arr,left,right,pivotIndex);
if(nRet < k){
return findKMax(arr,nRet+1,right,k);
}
else if(nRet > k){
return findKMax(arr,left,nRet-1,k);
}
return nRet;
}
int main(){
int i,k,nRet;
int arr[] = {8,3,4,1,9,7,6,10};
scanf("%d",&k);
nRet = findKMax(arr,0,7,k-1);
printf("The Kth Max Number locate in %d and the value is: %d\n",nRet,arr[nRet]);
for(i=0;i<8;i++){
printf("%3d ",arr[i]);
}
return 0;
}
0 0
- 无序n个元素中,寻找第K大的元素 O(n)
- 寻找第k小的元素或者第k大的元素 -- O(n)
- 如何在N个无序数组元素中,查找第K大元素
- N个元素数组中第K大元素
- 寻找第K小元素O(N)算法
- 寻找第n大的元素
- 寻找一个序列中第n大的元素
- 寻找N个元素中最大的K个元素解法
- N个数中第k大的元素
- 编写程序,在O(n)时间内从数组x[0..n-1]中找出第k个最小的元素?
- 找n个数字中第k小的元素
- N 个元素的数组,求第K大的元素
- 在N个不同的元素中寻找最大元素
- Java实现O(log(n+m))两个有序数组中第K大元素或中位数
- 一个无序数组中第K大的元素
- 由无序数组中找到第K 大的元素
- 无序数组中找到第k大的元素
- 查找一个无序数列中第k个大的元素
- 如何线程安全地遍历List:Vector、CopyOnWriteArrayList
- 服务器遭受的一次攻击
- jQuery源码浅析
- poj1426之一深搜
- 我的Android网络框架之旅(二)
- 无序n个元素中,寻找第K大的元素 O(n)
- EF+Oracle+Unity+MVC+AutoMapper 框架的搭建
- Tsinsen A1116 幂方分解
- 树莓派一些常用设置
- Chromium网页渲染调度器(Scheduler)实现分析
- Android 网络与数据存储
- 搭建开发环境
- 心得
- Scala - Parentheses and Curly Brackets in Anonymous Functions