首页 新闻 赞助 找找看

为什么这个快速排序quicksort在编译时需要多敲一个数字才会运行Help

0
悬赏园豆:5 [已解决问题] 解决于 2015-03-31 22:24

#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];
     i=left;j=right;
     while(i!=j)
     {
         while(a[j]>=temp&&i<j)
            j--;
         while(a[i]<=temp&&i<j)
            i++;
         if(i<j)
         {
            t=a[i];
            a[i]=a[j];
            a[j]=t;
         }
     }
     a[left]=a[i];
     a[i]=temp;
     quicksort(left,i-1);
     quicksort(i+1,right);
     return ;
}
int main()
{
     scanf("%d",&n);
     for(int i=1;i<=n;i++)
        scanf("%d ",&a[i]);
     quicksort(1,n);
     for(int i=1;i<=n;i++)
        printf("%d ",a[i]);
     return 0;
}
为什么编译的时候还需要多敲击一个数字  才会进行快速排序。。。。Help

零魂的主页 零魂 | 初学一级 | 园豆:135
提问于:2015-03-30 22:16
< >
分享
最佳答案
1

scanf("%d",&n);

是要你输入元素的数量

for(int i=1;i<=n;i++)
        scanf("%d ",&a[i]);

是要你输入n个元素内容。

 

所以,你总共要输入的数据数量是 n+1 个。

收获园豆:5
519740105 | 大侠五级 |园豆:5810 | 2015-03-31 12:44

可是我需要输入n+2个。。。。。。。

零魂 | 园豆:135 (初学一级) | 2015-03-31 17:16

@零魂: 

代码修改为:

     printf("请输入元素个数:");

     scanf("%d",&n);

     for(int i=1;i<=n;i++)

     {

        printf("请输入第 %d 个元素:", i);
        scanf("%d ",&a[i]);

      }

 

看提示信息是什么。

 

519740105 | 园豆:5810 (大侠五级) | 2015-03-31 17:33

@519740105:谢谢!! 但是换了之后是这里不知道为什么第一个元素输入了两次 什么问题呢??

零魂 | 园豆:135 (初学一级) | 2015-03-31 21:10

@519740105: 应该是主函数的问题。。。但是我看不出来printf("请输入元素个数:");
     scanf("%d",&n);
     for(int i=1;i<=n;i++)
     {
        printf("请输入第 %d 个元素:", i);
        scanf("%d ",&a[i]);
      }

。。。。

零魂 | 园豆:135 (初学一级) | 2015-03-31 21:26

@零魂: %d 后的空格删除看?

另外,你的这个输入,排序是5、1、5还是5、6、1呢?

519740105 | 园豆:5810 (大侠五级) | 2015-03-31 21:29

@519740105: 没用 还是一样的问题  我想排序5 1 6结果第一个元素就需要多输入一次

您知道什么毛病吗

零魂 | 园豆:135 (初学一级) | 2015-03-31 21:36

@零魂: 看你代码是没问题的,这个的分析就有点麻烦了。

你要确认你输入的4个数值后,排序的是哪三个数值。(不要输入两个1)

519740105 | 园豆:5810 (大侠五级) | 2015-03-31 21:38

@519740105: 这个样子  您知道问题在哪里吗??

零魂 | 园豆:135 (初学一级) | 2015-03-31 21:41

@零魂: 

int a[101], n;
int _tmain(int argc, _TCHAR* argv[])
{
    scanf_s("%d", &n);
    for (int i = 1; i <= n; i++)
    {
        scanf_s("%d", &a[i]);
    }
    for (int i = 1; i <= n; i++)
        printf("%d ", a[i]);
    return 0;
}

没有你说的问题。

519740105 | 园豆:5810 (大侠五级) | 2015-03-31 21:50

@519740105: 额   这个是主函数的代码吗??为什么我感觉他不是。。。。。。

零魂 | 园豆:135 (初学一级) | 2015-03-31 21:53

@零魂: win32的,把scanf_s和tmain修改就好。

519740105 | 园豆:5810 (大侠五级) | 2015-03-31 22:09

@519740105: 谢了  搞定了  对了 怎么给您园豆了 

零魂 | 园豆:135 (初学一级) | 2015-03-31 22:11
其他回答(1)
0

不太明白,加入n是5的话,之后只需要敲5个数字吧。

幻天芒 | 园豆:37175 (高人七级) | 2015-03-31 08:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册