#include <iostream> using namespace std; //当然用快速排序也是一样的。 class Heap { public: Heap(){} void Insert(int a[],int len,int N) { data = new int[N]; size = N; for(int i=0;i<N;i++) { data[i]=a[i]; } int n = N/2; while(n>=0) { SetVal(data,n); n--; } for(int i=N;i<len;i++) { if(data[0]>a[i]) { data[0]=a[i]; SetVal(data,0); } } } void SetVal(int a[],int n) { int i = n; int j = i*2+1; while(j<size) { if(j+1<size && data[j]<data[j+1]) j=j+1; if(data[i]<data[j]) { int temp = data[i]; data[i] = data[j]; data[j] = temp; } i = j; j = i*2+1; } } int GetNum() { return data[0]; } ~Heap() { if(data) delete []data; } private: int *data; int size; }; int find_n_min(int a[],int n,int val) { Heap hp;//我使用的大堆求解的,虽然是大堆,我却将较小的数插入, //然后在这一组较小的数里面,按照大堆的升序方式,让第一个下标的位置保存我需要找到的值。 hp.Insert(a,n,val); return hp.GetNum(); } int main() { int a[]={2,3,4,5,6,11,2,3,3,4,4,5,5,6,0,0,0}; cout<<find_n_min(a,sizeof(a)/sizeof(int),4)<<endl; return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-06 00:10:54