利用快速排序的思想,任意取某个数p,然后小于p的放左边,大于p的放右边。一次快排后p最后所在的位置是最终位置,然后看位于k的左边还是右边再递归。
缺点:会改变原来的数组
#include <iostream>
#include <time.h>
using namespace std;
int Partition(int a[],int left,int right)
{
if(left<right)
{
int i=left,j=right;
int x=a[left];
while(i!=j)
{
while(i<j && a[j]>x)
j--;
while(i<j && a[i]<=x)
i++;
if(i<j)