1 .问题
在有n个整数的数组S中, 选第k小的元素。
2.解析
3、设计
int Select( int a[], int s, int e, int k )
{
int i=s,j=e,tmp;
if(s < e)
{
tmp = a[s];
while(i != j)
{
while(j > i && a[j] >= tmp)
j--;
a[i] = a[j];
while(i < j && a[i] <= tmp)
i++;
a[j] = a[i];
}
a[i] = tmp;
if(k-1 == i)
return a[i];
else if(k-1 < i)
return Select(a, s, i-1, k);
else
return Select(a, i+1, e, k);
}
else if(s == e && s == k-1)
return a[k-1];
}
4、分析
5.源码
https://github.com/land555/algorithm-analy-sis/blob/main/week6.cpp