搜索
查看: 1016|回复: 5
打印 上一主题 下一主题

照抄啊哈磊的快速排序法,为什么会出现奇怪的错误?

[复制链接]
跳转到指定楼层
楼主
发表于 2014-7-23 15:09:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
本帖最后由 嗨,强哥! 于 2014-7-23 15:19 编辑

这是我照抄的代码:

[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);//继续处理右边的,这是一个函数递归
}

int main()
{
    int i, j, t;
    printf ("quicksort  --- 快速排序法\n\n");
    printf ("请输入需要排序的整数个数: ");
    scanf ("%d", &n);
    for (i = 1; i <= n; i++)
    {
        printf ("请输入第 %2d 个整数: ");               
        scanf ("%d", &a);
    }
    quicksort (1, n);  //快速排序函数调用
    printf ("\n");   
   
    //输出排序后的结果
    printf ("排序后的序列: ");
    for (i = 1; i <= n; i++)
         printf ("%d ",a);
   
    printf ("\n\n\n");
    system("pause");
    return 0;
}
[/mw_shl_code]


为准确、方便输入,自己多加了几条 printf() 语句,您对照检查的时候可以忽略不看。



最佳答案

查看完整内容

printf ("请输入第 %2d 个整数: "); 少了变量了,只有一个占位符
沙发
发表于 2014-7-23 15:09:28 | 只看该作者
printf ("请输入第 %2d 个整数: ");  

少了变量了,只有一个占位符
板凳
 楼主| 发表于 2014-7-23 15:21:09 | 只看该作者
这是磊哥的代码:

[mw_shl_code=c,true]/*quicksort  --- 快速排序法*/
#include <stdio.h>
int a[101],n;//定义全局变量,这两个变量需要在子函数中使用

void quicksort(int left,int right)
{
    int i,j,t,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);//继续处理右边的 ,这里是一个递归的过程
}

int main()
{
    int i,j,t;
    //读入数据
    scanf("%d",&n);
    for(i=1;i<=n;i++)
                   scanf("%d",&a);

    quicksort(1,n); //快速排序调用
   
    //输出排序后的结果
    for(i=1;i<=n;i++)
        printf("%d ",a);

    getchar();getchar();
    return 0;
}[/mw_shl_code]
地板
 楼主| 发表于 2014-7-23 15:27:11 | 只看该作者
同样的错误也出现在冒泡排序法中,我查找了很长时间没有发现错误所在。
后来我只好复制磊哥的代码,然后加上自己的printf()语句以及注释才解决,程序才正常运行!
真是奇怪啊,所以当同样的错误再次出现时,我只好来求助大家了。
5#
 楼主| 发表于 2014-7-23 15:48:06 | 只看该作者
rosynirvana 发表于 2014-7-23 15:39
printf ("请输入第 %2d 个整数: ");  

少了变量了,只有一个占位符

谢谢,刚刚我自己也找到原因了。
6#
 楼主| 发表于 2014-7-23 15:48:50 | 只看该作者
rosynirvana 发表于 2014-7-23 15:39
printf ("请输入第 %2d 个整数: ");  

少了变量了,只有一个占位符

[mw_shl_code=c,true]                printf ("请输入第 %2d 个整数: ", i);        [/mw_shl_code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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