| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 510 人关注过本帖
标题:(已经解决了 自己太粗心了 谢谢大家)关于快速排序的问题
只看楼主 加入收藏
Edwardwang03
Rank: 2
来 自:西安
等 级:论坛游民
帖 子:45
专家分:32
注 册:2012-9-18
结帖率:50%
收藏
 问题点数:0 回复次数:1 
(已经解决了 自己太粗心了 谢谢大家)关于快速排序的问题
#include <stdio.h>
#include <string.h>

void Swap(int *x, int *y)
{
    int p;
   
    p = *x;
    *x = *y;
    *y = p;
}

//将待排元素分为左右两段
int Partition(int *a, int p, int r)
{
    int i = p, j = r+1;//i设置在开头 j设置到最后一个元素的后边
    int t = 0;
   
    int x = a[p];//x记录基本参考元素
    //将<x的元素交换到左边  >x的交换到右边
    while (1) {
        while (a[++i] < x && i<r) //从左向右找到第一个大于x的元素停下来
            ;
        while (a[--j] > x) //从右向左找到第一个小于x的元素停下来
            ;
        if (i >= j) {//左游标大于等于右游标  整个数组都遍历了
            break;
        }
        Swap(&a[i], &a[j]);//交换两个元素的位置
    }
    //整个数组遍历结束,将最左边的基准元素和右边游标j所在的元素交换
    a[p] = a[j];
    a[j] = x;
    return j;//返回中间元素的脚标
}

void QuickSort(int *a, int p, int r)
{
    if(p < r){//只要还可以分割
        int q = Partition(a, p, r);
        QuickSort(a, p, q-1);//对左半段排序
        QuickSort(a, q+1, r);//对右半段排序
    }
}

int main(void)
{
    int a[8] = {9, 2, 5, 10, 25, 3, 6, 45};
    int i = 0;
   
    printf("test quicksort code:\n");
    QuickSort(a, 0, sizeof(a)/sizeof(int)-1);
   
    while (i < sizeof(a)/sizeof(int)) {
        printf("%d ", a[i]);
    }
    printf("\n");
   
    getchar();
   
    return 0;
}

不知道错在哪里了  一运行就是死循环[color=#FF0000][/color]

[ 本帖最后由 Edwardwang03 于 2014-3-12 21:07 编辑 ]
搜索更多相关主题的帖子: include 记录 元素 左右 
2014-03-12 20:30
Edwardwang03
Rank: 2
来 自:西安
等 级:论坛游民
帖 子:45
专家分:32
注 册:2012-9-18
收藏
得分:0 
求助呀  大家帮忙呀  版主大人呢?
2014-03-12 20:52
快速回复:(已经解决了 自己太粗心了 谢谢大家)关于快速排序的问题
数据加载中...
 
   



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

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