| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 427 人关注过本帖
标题:关于一个快速排序的问题
只看楼主 加入收藏
那个ID
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2015-3-13
结帖率:50%
收藏
已结贴  问题点数:18 回复次数:4 
关于一个快速排序的问题
# include <stdio.h>
# include <malloc.h>

void Quicksort(int * a, int low, int high);
int FindPos(int * a, int loe, int high);

int main()
{
    int i;
    int len;
    int *a;

    printf("输入需要排序的个数:");
    scanf("%d",&len);
    a = (int *)malloc(sizeof(int)*len);
     for (i = 0; i < len; i++)
     {
       scanf("%d",&a[i]);
     }
    Quicksort(a , 0, len-1);/* 0 表示第一个元素的下标, len-1 表示最后一个元素的下标*/

    for (i = 0; i < len; i++)
        printf("%d ", a[i]);
    puts("\n");


    return 0;
}

void Quicksort(int * a, int low, int high)
{
    int pos;
    if (low < high)
    {
        pos = FindPos(a, low, high);
        Quicksort(a, low, pos-1);
        Quicksort(a, pos+1, high);
    }
}

int FindPos(int * a, int low, int high)
{
    int val = a[low];

    while (low < high)
    {
        while (low < high && a[high] >= val)
            --high;
        a[low] = a[high];

        while (low < high && a[high] <= val)
          low++;
        a[high] = a[low];
    }/*终止 while 循环之后, low 和 high 是相等的*/

    a[low] = val;
    return high; /* high 可以改成 low, 但不能改成 val, a[low], a[high]*/
}
图片附件: 游客没有浏览图片的权限,请 登录注册



求大神帮助下
搜索更多相关主题的帖子: 元素 include 
2015-05-17 21:57
宋翎
Rank: 1
等 级:新手上路
帖 子:1
专家分:6
注 册:2015-5-18
收藏
得分:6 
选择法排序和冒泡法排序比较快
2015-05-18 18:45
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:6 
FindPos函数有问题,修改了一下供参考:
# include <stdio.h>
# include <malloc.h>

void Quicksort(int * a, int low, int high);
int FindPos(int * a, int loe, int high);

int main()
{
    int i;
    int len;
    int *a;

   printf("输入需要排序的个数:");
   scanf("%d",&len);
    a = (int *)malloc(sizeof(int)*len);
     for (i = 0; i < len; i++)
     {
       scanf("%d",&a[i]);
     }  
    Quicksort(a , 0, len-1);/* 0 表示第一个元素的下标, len-1 表示最后一个元素的下标*/

    for (i = 0; i < len; i++)
        printf("%d ", a[i]);
    puts("\n");

    return 0;
}

void Quicksort(int * a, int low, int high)
{
    int pos;
    if (low < high)
    {
        pos = FindPos(a, low, high);
        Quicksort(a, low, pos-1);
        Quicksort(a, pos+1, high);
    }
}

int FindPos(int * a, int low, int high)
{
    int val = a[low],t,k;
    k=low;
    while (low < high)
    {
        while (low <high && a[high] > val)  
           high--;
        while (low < high && a[low] <= val)
           low++;
        if(low<high)  //表明a[low]>val 并且 a[high]<=val,需要交换
          {
            t=a[high];a[high] = a[low];a[low]=t;
          }
      
    }/*终止 while 循环之后, low 和 high 是相等的*/
    a[k]=a[high];    //这一步是需要的,否则会丢数据
    a[high]=val;
    return high; /* high 可以改成 low, 但不能改成 val, a[low], a[high]*/
}
2015-05-19 07:13
calix
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:249
专家分:1442
注 册:2015-5-4
收藏
得分:6 
while (low < high && a[high] <= val)
改成
while (low < high && a[low] <= val)
2015-05-19 09:05
那个ID
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2015-3-13
收藏
得分:0 
谢谢帮助
2015-05-19 21:10
快速回复:关于一个快速排序的问题
数据加载中...
 
   



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

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