/*
description:
寻找最小的k个数
有n个数,请找出最小的k个数要求时间复杂度尽可能低。
方法1:全排序 时间复杂度O(n*logn)
方法2:部分排序 维护一个容量为k的堆 O(n*logk)
方法3:线性选择算法 时间复杂度 O(n) 本算法
<<编程之法>>
参考:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/02.01.md
author: JasonZhou
date: 2016-03-13
*/
#include<iostream>
using namespace std;
//选择前k小的数
void QuickSelect(int s[],int k,int left,int right)
{
int i,j,pivot;
if (left<=right)
{
pivot=s[left];
i=left;
j