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

请不要粘贴!!!粘贴者少来!!!请详细解释一下!!谢谢... 请不要粘贴!!!
粘贴者少来!!!请详细解释一下!!谢谢
展开
 我来答
杜爷1号
推荐于2017-10-11 · 知道合伙人软件行家
杜爷1号
知道合伙人软件行家
采纳数:4973 获赞数:9186
毕业于福建农林大学,本科学士学位。从事IT行业3年,曾参与过多个大型项目的需求调研、软件研发。

向TA提问 私信TA
展开全部

  “快速排序法”使用的是递归原理,下面我结合一个例子来说明“快速排序法”的原理。首先给出一个数组{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]);
}
365524764
推荐于2017-09-02 · TA获得超过241个赞
知道答主
回答量:197
采纳率:0%
帮助的人:206万
展开全部
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
继续;
蛋疼,擦,太难的表达出来了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a1012144015
2015-05-23 · TA获得超过6415个赞
知道大有可为答主
回答量:9038
采纳率:40%
帮助的人:1353万
展开全部
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
继续; \
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式