要去看埃菲尔铁塔的顶
欢迎关注本人微博:t.cn/RGSLVUk
快速排序
以给定分割点为基准,使得左边的都小于基准 ,右边的都大于基准,
再将左边选出一个基准,然后再细分,使得左边都小于,右边都大于基准,
然后再.......... 这样左边就好了,然后右边就好了
然后右边就好了.....
然后整体就好了。
比如 1 4 7 8 5 1 2 6 5 47 2
假定7 为基准,
1 4 7 8 5 1 2 6 5 47 2
一次排序后 7会被2换掉
1 4 2 8 5 1 2 6 5 47 2
这时 左边游标会到8
然后将8和最后那个2交换
1 4 2 8 5 1 2 6 5 47 8
继续交换
2 5 6 12 8
1 4 7 8 5 12 6 5 47 2
最终会将 key( 7 )写入那个 6的位置
一次排序后为
1 4 2 5 5 6 7 12 47 8
void Qsort(int n[],int low,int high)
{
if (low > high)
return;
/*记录下标*/
int f = low;
int l = high;
int key = n[f]; //分割点
while (f < l)
{
while (n[l] >= key && f < l) // 右边找出 小于分割点的
l--;
n[f] = n[l]; // 找到后 把它换到低处
while (n[f] <= key && f < l) // 左边找出 大于分割点的
f++;
n[l] = n[f]; // 找到后 把它换到高处
}
n[f] = key; //这里肯定是 l == f 处,也就是key要放置的地方
Qsort(n, low, f - 1);
Qsort(n, l + 1, high);
}