查找数组中第K个最小值
来源:互联网 发布:java wait notify 源碼 编辑:程序博客网 时间:2024/05/20 03:07
类似快排,通过partition这个函数找到一个大于左边小于右边的数,如果这个数的序号大于K,在左边查找,小于K在右边查找。一个递归解决问题
代码:
#include<iostream>
using namespace std;
template<typenameE>
int findpivot(EA[], int i, int j)
{
return (i +j) / 2;
}
template<typenameE>
void swap(EA[], int i, int j)
{
E temp = A[i];
A[i] =A[j];
A[j] = temp;
}
template<typenameE>
int partition(EA[], int l, int r, E&pivot)
{
do {
while ((A[++l]<pivot));
while ((l <r) && pivot < A[--r]);
E temp = A[l];
A[l] =A[r];
A[r] = temp;
} while (l <r);
return l;
}
template<classE>
E findK(EA[], int i, int j, int K)
{
if (j <=i)return A[i];
int pivotindex = findpivot(A,i, j);
swap(A, pivotindex, j);
int k = partition<E>(A,i - 1, j, A[j]);
swap(A, k, j);
A[k];
if (k == K-1)return A[k];
else if (k > K-1)return findK<E>(A,i, k - 1, K);
else return findK<E>(A, k + 1,j, K);
}
int main()
{
int array[8] = { 3,5,2,4,10,100,98,99};
cout << findK(array, 0, 7,5 )<< endl;
}
实现:
- 查找数组中第K个最小值
- 寻找数组中第k个最小值,使用快速排序
- 查找无序数组中的第K个最小值[快排思想]
- data_struction_test1:查找数组的前k个最小值
- 查找数组的前K个最小值的算法
- 查找数组中第K大元素
- 两个排序数组合并第k或前k个最小值问题
- 如何在N个无序数组元素中,查找第K大元素
- 找出数组中第k个元素
- 几种查找数组的前K个最小值的算法
- 几种查找数组的前K个最小值的算法
- 几种查找数组的前K个最小值的算法
- 查找数组中第K大的数
- 在两个排序数组中查找第k小元素
- 查找数组中第K大的值
- 查找数组中第k小的元素
- 查找一个数组中第k小的数
- 多个有序数列中查找第k小值
- 期刊编审流程
- iOS copy相关
- #CCF准备一年日常刷题#201612-1 中间数
- 文件IO
- 交叉编译boost和opencv
- 查找数组中第K个最小值
- MAC电脑常用快捷键
- 防卫式声明笔记----C++学习之路
- java IO流 之 字符流 之 FileReader
- EBS开发_此责任无可用函数
- 实现基于文件验证的vsftpd虚拟用户和基于MYSQL验证的vsftpd虚拟用户
- C和指针之反转字符串
- 进入信息与计算科学这个专业后解除C语言课程的感受
- 寿司 (拆环为链 大模拟)