int partition(int a[],int start,int endd)
{
int small = start -1;
for(int i=start;i<=endd-1;i++)
{
if(a[i]<a[endd])
{
small++;
if(a[i]!=a[small])
{
int tmp = a[i];
a[i] = a[small];
a[small] = tmp;
}
}
}
small++;
int tmp = a[endd];
a[endd] = a[small];
a[small] = tmp;
return small;
}
int MoreThanHalfNum(int a[],int n)
{
int middle = n/2;
int start = 0;
int endd = n-1;
int index = partition(a,start,endd);
while(index != middle)
{
if(index<middle)
{
start = index + 1;
index = partition(a,start,endd);
}
else if(index>middle)
{
endd = index -1;
index = partition(a,start,endd);
}
}
return a[index];
}
partition函数用处比较多,在快排中用到,还可以做最小的K个数等等