#include<stdio.h>
#include<set>
#include<vector>
#include<iostream>
using namespace std;
typedef multiset<int,greater<int>> intset;
typedef multiset<int,greater<int>>::iterator setIterator;
void KLastNumberAgain(int* input,int len,int k){
if(input==NULL||len<=0||k>len)
return;
vector<int> data;
for(int i=0;i<len;i++)
data.push_back(input[i]);
if(data.size()<k||k<1)
return;
intset lastNumbers;
vector<int>::const_iterator iter=data.begin();
for(;iter!=data.end();iter++){
if(lastNumbers.size()<k)
lastNumbers.insert(*(iter));
else{
multiset<int,greater<int>>::iterator maxIter=lastNumbers.begin();
if(*iter<*maxIter){
lastNumbers.erase(maxIter);
lastNumbers.insert(*iter);
}
}
}
multiset<int,greater<int>>::iterator Iter=lastNumbers.begin();
for(;Iter!=lastNumbers.end();Iter++)
printf("%3d",*(Iter));
}
int Partition(int* input,int low,int high){
int pivot=input[low];
while(low<high){
while(low<high&&input[high]>=pivot) high--;
input[low]=input[high];
while(low<high&&input[low]<=pivot) low++;
input[high]=input[low];
}
input[low]=pivot;
return low;
}
void KLastNumber(int *input,int len,int* output,int k){
if(input==NULL||len<=0|| k<=0 || k>len)
return ;
int low=0;
int high=len-1;
int index=Partition(input,low,high);
while(index!=k-1){
if(index<k-1)
index=Partition(input,index+1,high);
else index=Partition(input,0,index-1);
}
for(int i=0;i<k;i++)
output[i]=input[i];
}
void Print(int* output,int len){
for(int i=0;i<len;i++)
printf("%3d",output[i]);
printf("\n");
}
KLastNumbers
最新推荐文章于 2016-09-05 09:28:53 发布