快速排序这个算法看似很简单,但折磨了我一下午,主要是边界值问题,看来以后得好好研究了,下面贴出实现代码。
每一行代码都有每一行代码的作用,比如说那两个循环,换一种写法都不行。
void quick_sort(int *a, int low, int high)
{
int begin = low;
int j = high + 1;
while(low < j)
{
while(a[++low] < a[begin] && low < high);
while(a[--j] > a[begin]);
if (low < j)
{
int alow = a[low];
a[low] = a[j];
a[j] = alow;
}
}
int temp = a[j];
a[j] = a[begin];
a[begin] = temp;
if(begin < j)
quick_sort(a, begin, j-1);
if(j < high)
quick_sort(a, j+1, high);
}
非递归实现版本:
扩展:求数组的前m个大的元素
。