搜索
查看: 993|回复: 9
打印 上一主题 下一主题

最常用的排序——快速排序

[复制链接]
跳转到指定楼层
楼主
发表于 2014-7-23 15:39:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最常用的排序——快速排序  章节里面
a[left]=a[i];
a[i]=temp;


这两行代码我没有看懂.能有人详细解说一下么?{:soso_e101:}
沙发
发表于 2014-7-23 15:56:27 | 只看该作者
[mw_shl_code=c,true]/*quicksort  --- 快速排序法*/
#include <stdio.h>
int a[101], n;        //定义全局变量,这两个变量需要在子函数中使用

void quicksort (int left, int right)  //quicksort:快速法
{
        int i, j, t, temp;        //temp: 临时雇员
   
    if (left > right)   //左边士兵探测的位置超过右边士兵的位置,则返回
                return;
   
    temp = a[left];     //temp 中存的就是基准数
    i = left;
    j = right;
    while (i != j)
    {
                //顺序很重要,要先从右边开始找
        while (a[j] >= temp && i<j)
                        j--;
        //再找左边的
        while (a <= temp && i<j)
                        i++;
            
        //交换两个数在数组中的位置
        if (i < j)
        {   t = a; a = a[j]; a[j] = t;   }
    }
    a[left] = a;  //最终将基准数归位
    a = temp;     //设定下一个基准数
   
    quicksort (left, i-1);//继续处理左边的,这是一个函数递归
    quicksort (i+1, right);//继续处理右边的,这是一个函数递归
}
[/mw_shl_code]
板凳
发表于 2014-7-23 15:58:24 | 只看该作者
本帖最后由 嗨,强哥! 于 2014-7-23 16:04 编辑

[backcolor=white !important][mw_shl_code=c,true]a[left] = a;  //最终将基准数归位
a = temp;     //设定下一个基准数[/mw_shl_code]
这些注释是我自己的理解,希望对你有帮助。

地板
发表于 2014-7-23 16:05:54 | 只看该作者
quicksort ()难点应该在递归过程。
5#
发表于 2014-7-24 10:11:12 | 只看该作者
每次左右士兵相遇时就交换,使基准数归位。----抱歉,前面的注释有误,特此纠正。
6#
发表于 2014-7-24 10:25:04 | 只看该作者
嗨,强哥! 发表于 2014-7-23 16:05
quicksort ()难点应该在递归过程。

难点不是因为C没有高级抽象手段吗
例如用Haskell写qsort只需要2行

qsort []       = []
qsort (p:xs) = qsort [x | x<-xs, x<p] ++ [p] ++ qsort [x | x<-xs, x>=p]
7#
发表于 2014-7-24 10:34:53 | 只看该作者
rosynirvana 发表于 2014-7-24 10:25
难点不是因为C没有高级抽象手段吗
例如用Haskell写qsort只需要2行

我困惑的是递归过程中的返回

比如磊哥的代码:
[mw_shl_code=c,true]    quicksort (left, i-1);//继续处理左边的,这是一个函数递归
    quicksort (i+1, right);//继续处理右边的,这是一个函数递归[/mw_shl_code]

这其中有两个递归,第一个递归结束返回的是自身调用函数吗?
然后接着执行下一个递归,返回的还是自身调用函数吗?
8#
发表于 2014-7-24 10:46:15 | 只看该作者
嗨,强哥! 发表于 2014-7-24 10:34
我困惑的是递归过程中的返回

比如磊哥的代码:

void quicksort(int, int);

所以什么都不返回
9#
发表于 2014-7-24 10:50:27 | 只看该作者
rosynirvana 发表于 2014-7-24 10:46
void quicksort(int, int);

所以什么都不返回

void数据类型函数是不需要返回数据呢还是不需要返回到其调用函数处?
10#
发表于 2014-7-24 10:53:34 | 只看该作者
嗨,强哥! 发表于 2014-7-24 10:50
void数据类型函数是不需要返回数据呢还是不需要返回到其调用函数处?

不返回数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表