C 实现快速排序

一、快速排序

快速排序可以理解为是对冒泡排序的一种改进,把一组数,按照初始选定的标杆(参照数),分别从两端开始排序,左端'i'只要小于标杆(参照数)的数,右端'j'只要大于标杆(参照数)的数,
i----->middle<-----j每一次排序循环条件为 i != j 左端I不等于j,每次排序,j先排,从右往左找,知道找到第一个比标杆(参照数)小的数就停下来,而i从左往右,除了找到比自己大的数停下来之外,还要满足i<j的条件。当i和j都停下来时,我们就交换索引i处的值和索引j处的值,如果 i != j 就继续从当前j往左边排序找到比标杆(参照值)小的数,i继续从当前位置向右找比自己大的数,这样循环直到 i == j 意味着,当前i、j索引的值,除了参照值左边都比标杆(参照数)小,右边都比参照数大,然后第一次排序把标杆和i处的值交换,就算完成了,然后把该数组分成了两段,分别再递归调用自身继续排序,直到每轮剩下两个数或者j先找,走到了i的位置,所以递归调用停止的条件就应该是 i>j-1。

二、C语言实现

void quickSort(int * nums, int s, int e)
{
    if(s >= e)
        return;
    int mark, k, j, t;
    mark = s;
    k = s,
    j = e;
    for(; s < e;)
    {
        for(;s < e && nums[e] > nums[mark];)
            e--;
        for(;s < e && nums[s] <= nums[mark];)
            s++;  
        t = nums[e];
        nums[e] = nums[s];
        nums[s] = t;
  
    }
    t = nums[mark];
    nums[mark] = nums[s];
    nums[s] = t;
    quickSort(nums, k, s-1);
    quickSort(nums, s+1, j);   

}
posted @ 2018-07-31 23:24  G1733  阅读(3082)  评论(0编辑  收藏  举报