#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
scanf("%d",&n);
是要你输入元素的数量
for(int i=1;i<=n;i++)
scanf("%d ",&a[i]);
是要你输入n个元素内容。
所以,你总共要输入的数据数量是 n+1 个。
可是我需要输入n+2个。。。。。。。
@零魂:
代码修改为:
printf("请输入元素个数:");
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
printf("请输入第 %d 个元素:", i);
scanf("%d ",&a[i]);
}
看提示信息是什么。
@519740105:谢谢!! 但是换了之后是这里不知道为什么第一个元素输入了两次 什么问题呢??
@519740105: 应该是主函数的问题。。。但是我看不出来printf("请输入元素个数:");
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
printf("请输入第 %d 个元素:", i);
scanf("%d ",&a[i]);
}
。。。。
@零魂: %d 后的空格删除看?
另外,你的这个输入,排序是5、1、5还是5、6、1呢?
@519740105: 没用 还是一样的问题 我想排序5 1 6结果第一个元素就需要多输入一次
您知道什么毛病吗
@零魂: 看你代码是没问题的,这个的分析就有点麻烦了。
你要确认你输入的4个数值后,排序的是哪三个数值。(不要输入两个1)
@519740105: 这个样子 您知道问题在哪里吗??
@零魂:
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: 额 这个是主函数的代码吗??为什么我感觉他不是。。。。。。
@零魂: win32的,把scanf_s和tmain修改就好。
@519740105: 谢了 搞定了 对了 怎么给您园豆了
不太明白,加入n是5的话,之后只需要敲5个数字吧。