开发者社区> 问答> 正文

C语言中快速排序法的原理及应用

请不要粘贴!!!

展开
收起
知与谁同 2018-07-21 17:06:03 1649 0
3 条回答
写回答
取消 提交回答
  • 社区管理员
    49 38 65 97 76 13 27 50 按非降序排,
    用快速排序实现
    解释:用每次取的数据作为分界点,在这之内分成2块
    先和最后面的数据比较,当大于时就互换位置,在和前面的数据比较
    设置low 和high个指针先与high(也就是最后一个关键字比较)大于就互换位置否则就不换指导换了一次位置后改变high的位置,在与low比较小于就互换直到交换就重置low,在high就这样循环,直到high=low的时候就完成了一次
    再在分开的2个区内用同样的方法比较
    例如:
    先去49 把数据分成 27 38 13 49 76 97 65 50
    在取27 ,用相同的方法把 27 38 13排
    取76 把76 97 65 50排
    取49 先和50比较 小于50 在和27比较,大于27就互换位置
    27 38 65 97 76 13 49 50
    继续拿49 先和38比较大于就不换 在和65 小于就换位置
    27 38 49 97 76 13 65 50
    在拿49与13比较,大于就换
    27 38 13 97 76 49 65 50
    再拿65与97 小于换
    27 38 13 49 76 97 65 60
    再拿49与76比较,小于不换
    一趟后: 27 38 13 49 76 97 65 60
    继续; \
    2019-07-17 22:49:43
    赞同 展开评论 打赏
  • Nothing for nothing.
    49 38 65 97 76 13 27 50 按非降序排,
    用快速排序实现
    解释:用每次取的数据作为分界点,在这之内分成2块
    先和最后面的数据比较,当大于时就互换位置,在和前面的数据比较
    设置low 和high个指针先与high(也就是最后一个关键字比较)大于就互换位置否则就不换指导换了一次位置后改变high的位置,在与low比较小于就互换直到交换就重置low,在high就这样循环,直到high=low的时候就完成了一次
    再在分开的2个区内用同样的方法比较
    例如:
    先去49 把数据分成 27 38 13 49 76 97 65 50
    在取27 ,用相同的方法把 27 38 13排
    取76 把76 97 65 50排
    取49 先和50比较 小于50 在和27比较,大于27就互换位置
    27 38 65 97 76 13 49 50
    继续拿49 先和38比较大于就不换 在和65 小于就换位置
    27 38 49 97 76 13 65 50
    在拿49与13比较,大于就换
    27 38 13 97 76 49 65 50
    再拿65与97 小于换
    27 38 13 49 76 97 65 60
    再拿49与76比较,小于不换
    一趟后: 27 38 13 49 76 97 65 60
    继续;
    蛋疼,擦,太难的表达出来了
    2019-07-17 22:49:43
    赞同 展开评论 打赏
  •   “快速排序法”使用的是递归原理,下面我结合一个例子来说明“快速排序法”的原理。首先给出一个数组{53,12,98,63,18,72,80,46, 32,21},先找到第一个数--53,把它作为中间值,也就是说,要把53放在一个位置,使得它左边的值比它小,右边的值比它大。{21,12,32, 46,18,53,80,72,63,98},这样一个数组的排序就变成了两个小数组的排序--53左边的数组和53右边的数组,而这两个数组继续用同样的方式继续下去,一直到顺序完全正确。

      一般来说,冒泡法是程序员最先接触的排序方法,它的优点是原理简单,编程实现容易,但它的缺点就是--程序的大忌--速度太慢。

    附上快速排序代码: #include<stdio.h>
    void quicksort(int a[],int left,int right)
    {
        int i,j,temp;
        i=left;
        j=right;
        temp=a[left];
        if(left>right)
            return;
        while(i!=j)
        {
            while(a[j]>=temp&&j>i)
                j--;
            if(j>i)
                a[i++]=a[j];
            while(a[i]<=temp&&j>i)
                i++;
            if(j>i)
                a[j--]=a[i];
            
        }
        a[i]=temp;
        quicksort(a,left,i-1);
        quicksort(a,i+1,right);
    }
    void main()
    {
        int a[]={53,12,98,63,18,72,80,46,32,21};
        int i;
        quicksort(a,0,9);
        /*排好序的结果*/
        for(i=0;i<10;i++)
            printf("%4d\n",a[i]);
    }

    2019-07-17 22:49:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载