快速排序算法

void quickSort(int s[], int l, int r) //返回调整后基准数的位置
{
    int i = l, j = r;
    int tmp = s[l]; //s[l]即s[i]就是第一个坑
    while (i < j)
    {
        // 从右向左找小于x的数来填s[i]
        while(i < j && s[j] >= x) 
            j--;  
        if(i < j) 
        {
            s[i] = s[j]; //将s[j]填到s[i]中,s[j]就形成了一个新的坑
            i++;
        }

        // 从左向右找大于或等于x的数来填s[j]
        while(i < j && s[i] <= x)
            i++;  
        if(i < j) 
        {
            s[j] = s[i]; //将s[i]填到s[j]中,s[i]就形成了一个新的坑
            j--;
        }
    }
    //退出时,i等于j。将x填到这个坑中。
    s[i] = tmp;

    quickSort(a,l,i-1);
        quickSort(a,i+1,r);
}

那种左右两边都找到后,再交换的写法是错误的

posted @ 2017-04-27 10:37  庚拓天下  阅读(145)  评论(0编辑  收藏  举报