Minimum k count
Void GetLeastNumbers (int * input, int n, int * output, int k)
{
If (input = NULL | output = NULL | k> n | n <= 0 | k <= 0)
Return;
Int start = 0;
Int end = n-1;
Int index = Partition (input, n, start, end );
While (index! = K-1)
{
If (index> k-1)
{
End = index-1;
Index = Partition (input, n, start, end );
}
Else
{
Start = index + 1;
Index = Partition (input, n, start, end );
}
}
For (int I = 0; I <k; ++ I)
Output [I] = input [I];
}
Typedef multiset > IntSet;
Typedef multiset >:: Iterator setIterator;
Void GetLeastNumbers (const vector & Data, intSet & leastNumbers, int k)
{
LeastNumbers. clear ();
If (k <1 | data. size () <k)
Return;
Vector : Const_iterator iter = data. begin ();
For (; iter! = Data. end (); ++ iter)
{
If (leastNumbers. size () <k)
LeastNumbers. insert (* iter );
Else
{
SetIterator iterGreatest = leastNumbers. begin ();
If (* iter <* (leastNumbers. begin ()))
{
LeastNumbers. erase (iterGreatest );
LeastNumbers. insert (* iter );
}
}
}
}