任意输入n个数,冒泡排序。我写的代码是这样的:
int main()
{
int i,j,t,n;
int a[n];
n=5;
printf("Please Enter %d numbers: \n",n);
for(i=0;i<n;i++) {
scanf("%d",&a[i]);
}
printf("The original order is: \n");
for(i=0;i<n;i++) {
printf("%5d",a[i]);
}
printf("\n");
for(i=0;i<n-1;i++) {
for(j=0;j<n-1-i;j++) {
if(a[j]>a[j+1]) {
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("The sorted order is: \n");
for(i=0;i<n;i++) {
printf("%5d",a[i]);
}
printf("\n");
return 0;
}
编译时没有问题,执行时就会说“程序已停止工作”之类的,我后来又把数组声明的"int a[n]"改成"int a[n+1]",就正常了,为什么啊?我里面明明只放了n个数,为什么要声明一个n+1个元素的数组?
通过实际测试你的程序有两个问题,一个n=5;应该在数组定义前面;一个冒泡排序两个for语句的第一个,应该是for(i=0;i<n;i++)
//冒泡的思想(按升序),两个相邻的数进行比较,第一个和第二个比较, 如果第一个比第二个大,就交换顺序,否则不交换。接下来再比较第二个和第三个,仍
//然是如果前者比后者大,就交换顺序。这样依次比较,这样当倒数第二个数和最后一个数比较过后,最后一个数就是这些数里最大的,上述过程称作第一趟冒泡排序。
//按这样的比较规则再比较最后一个数前面的所有数,就能找出倒数第二大的数来。判别排序结束的条件是......
答案就在这里:C语言 冒泡排序法
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?
冒泡算法?好久没玩了
任意输入n个数,需要动态分配数组:
#include "stdio.h"
int main()
{
int i,j,t,n;
//int a[n];
//n=5;
int *a;
printf("请输入数组长度:");
scanf("%d",&n);
a=new int[n]; //增加
printf("Please Enter %d numbers: \n",n);
for(i=0;i<n;i++) {
scanf("%d",&a[i]);
}
printf("The original order is: \n");
for(i=0;i<n;i++) {
printf("%5d",a[i]);
}
printf("\n");
for(i=0;i<n-1;i++) {
for(j=i;j<n-1;j++) {//修改
if(a[j]>a[j+1]) {
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("The sorted order is: \n");
for(i=0;i<n;i++) {
printf("%5d",a[i]);
}
printf("\n");
delete []a;//增加
return 0;
}