http://t.csdnimg.cn/0ooJj
理解看上面的文章,比较详细
下面是本人的理解之后的代码,仅供参考
//左右指针法
void fast_sort(int a[], size_t len)
{
if (len < 2) return;
int left = 0; //左指针指向最左边
int right = len - 1; //右指针指向最右边
int key = a[0]; //基准值
while (left < right)
{
while (a[right] >= key && left < right)
{
right--;
}
//这里跳出循环的原因:1、a[right]<a[key] 2、left == right
while (a[left] <= key && left < right)
{
left++;
}
//这里跳出循环的原因:1、a[left]>a[key] 2、left == right
if (left != right)
{
//左指针右指针交换值
swap(a[right], a[left]);
}
}
//这里跳出while原因:left==right,左右指针相遇,交换基准值 (key=a[0]),此时left指向基准值
swap(a[0], a[left]);
//利用基准值的下标left就可以推断出左右序列的长度和起始位置
fast_sort(a, left); //左序列递归
fast_sort(a + left + 1, len - left - 1); //右序列递归
}