成都创新互联网站制作重庆分公司

快速排序(C语言)-创新互联

首先我们要对一组数据进行排序:

站在用户的角度思考问题,与客户深入沟通,找到漳县网站设计与漳县网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、网站制作、企业官网、英文网站、手机端网站、网站推广、域名注册雅安服务器托管、企业邮箱。业务覆盖漳县地区。
  1. 在数组中选一个基准数(通常为数组第一个,黄圈圈标记了);

  2. 将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边,怎么移动,后面说;

  3. 对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。

好了,咱们开始吧!
快速排序需要两个哨兵,i 和 j,分别指向数组的头和尾。接下来就要进行移动。
在这里插入图片描述
我们通常选择第一个元素作为基准数,去移动数组元素,使其达到这个基准数的左边都是小于它的,右边都是大于它的。开始移动 i 和 j , i 和 j 是交互移动的,这里我们需要先移动 j,这是为甚呢,原因是先移动 j,等到这一行移动结束,i 的下一个就是 j 的时候,我们先移动 j ,可以避免将数据移动错误,后面会有体会。
当移动 j 时,就开始比较 j 是否比基准数大,如果大于或者等于就 j–,否则再看 i,如果 i 小于等于6,则i++ 再与基准数进行比较,否则 i 就要与 j指向的值互换,我们拿上面那个看

第一步:看j的值比6小,然后看i,i的值是6,所以i++,后面 i继续++,4,3,5都比6小,所以 i 就移动到了7下面。
在这里插入图片描述
到这里,j 所指向的值要与 i 所指向的值互换。在这里插入图片描述
互换完成,后面在比较 j 所指向的位置是否比基准数大,如果大就 j–;
这里 7 , 9 ,都比6大,所以j–,进行两次,j 就到达了4的下面。
在这里插入图片描述
4比6小,所以要再看 i,i 指向0,所以 i需要 i++,到 1,1也小于6, 所以 i 还需要++,到这里 i 就和 j指向同一个数4,在这里插入图片描述
然后 i = j 了,不能够满足条件,所以就要进行互换,将 i 指向的数,与基准数互换,这一轮比较就结束了,在这里插入图片描述
到这里,基准数6的左边都比6小,右边都比6大。后面还是按照这个来分别再基准数6的左右开始比较。
在这里插入图片描述
后面就找这样来,在左右两边再各自将第一个元素作为基准数进行排序。
以此类推,就好了,我把代码贴上。

#include#define SIZE 6

//快速排序
void quick_sort(int num[], int low, int high )
{int i,j,temp;
    int tmp;

    i = low;
    j = high;
    tmp = num[low];   //任命为中间分界线,左边比他小,右边比他大,通常第一个元素是基准数

    if(i >j)  //如果下标i大于下标j,函数结束运行
    {return;
    }

    while(i != j)
    {while(num[j] >= tmp && j >i)   
        {j--;
        }

        while(num[i]<= tmp && j >i)
        {i++;
        }

        if(j >i)
        {temp = num[j];
            num[j] = num[i];
            num[i] = temp;
        }
    }

    num[low] = num[i];
    num[i] = tmp;

    quick_sort(num,low,i-1);
    quick_sort(num,i+1,high);
}

int main(int argc , char **argv)
{//创建一个数组
    int num[SIZE] ={0};
    int i;

    //输入数字
    for(i =0; i< SIZE; i++)
    {scanf("%d",&num[i]);
    }

    quick_sort(num, 0, SIZE-1);

    for(i = 0; i< SIZE; i++)
    {printf(" %d ", num[i]);
    }

    return 0;
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站栏目:快速排序(C语言)-创新互联
转载来于:http://cxhlcq.com/article/gghoo.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部