| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 381 人关注过本帖
标题:菜鸟问题快速排序求解
只看楼主 加入收藏
yoy
Rank: 2
等 级:论坛游民
帖 子:29
专家分:24
注 册:2011-3-9
结帖率:100%
收藏
已结贴  问题点数:18 回复次数:2 
菜鸟问题快速排序求解
void quick_sort(int *x, int low, int high)

{
int i, j, t;

if (low < high)
{
i = low;
j = high;
t = *(x+low);

while (i<j)
{
    while (i<j && *(x+j)>t)
    {
    j--;
    }
        if (i<j)
   {
    *(x+i) = *(x+j);
    i++; //////////////////////这里i++后
    }
    while (i<j && *(x+i)<=t) ///////////这里的i不就是不是原来的那个了吗  不是第一个了吗
    {
    i++;
    }
    if (i<j)
    {
    *(x+j) = *(x+i);
    j--;
    }

}
*(x+i) = t;
quick_sort(x,low,i-1);   
quick_sort(x,i+1,high);   

}

}
求详解
2011-03-09 21:03
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:18 
快速排序的思路是这样的:将temp数放置在正确位置,左边的数都比它小,右边的数都比它大,然后递归
调用进行再次排序,直至结束。
程序代码:
void QuickSort(EleType a[],int Left,int Right)
{
    EleType temp;
    int i,j;
    i=Left;j=Right;temp=a[i];   //设置初始排序区
    while(i<j)
    {
        while(temp <= a[j])  //从右侧开始扫描
            j--;            //找到第一个小于基准记录的数据
        a[i]=a[j];           //覆盖
        while(a[i]<=temp)    //从左侧开始扫描
            i++;             //找到第一个大于基准记录的数据
        a[j]=a[i];           //覆盖
    }
    a[i]=temp;               //找到正确位置
    if(Left<i-1) QuickSort(a,Left,i-1);        //判断是否需要再排序
    if(i+1<Right) QuickSort(a,i+1,Right);
}
希望对你有帮助。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-03-09 22:15
yoy
Rank: 2
等 级:论坛游民
帖 子:29
专家分:24
注 册:2011-3-9
收藏
得分:0 
有帮助
2011-03-10 12:43
快速回复:菜鸟问题快速排序求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011922 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved