#提问一个有关c语言冒泡排序法与循环的问题
#代码如下
#include
int main()
{
int a[4]={0};
int i, j;
int temp=0;
scanf("%d,%d,%d,%d",&a[0],&a[1],&a[2],&a[3]);
for (i = 0; i <= 3; i++)
{
for (j = 0; j <= 3; j++)
{
if (a[j] > a[j + 1])
temp=a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
for (i = 0;i<=3; i++)
{
printf("%d\t", a[i]);
}
}
#输入1,9,4,12后会出现如下输出
望给个采纳哈,谢谢!
1、原因如下
把下面代码替换你的就可以了,你那里逻辑写的不对。。就是你j>=3,然后j+1=3+1=4,a[4]这里就超出数组范围了,所以就出现那个负数
for (j = i + 1; j <= 3; j++)
{
if (a[i] > a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
有什么问题吗
冒牌排序就写错了
for (i = 0; i < len-1; i++)
{
for (j = 0; j <= len-1-i; j++)
{
if (a[j] > a[j + 1])
temp=a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
len是数组元素个数
纯粹你自己写错了,逻辑不对,你自己再看看
改动处见注释,供参考:
#include<stdio.h>
int main()
{
int a[4]={0};
int i, j;
int temp=0;
scanf("%d,%d,%d,%d",&a[0],&a[1],&a[2],&a[3]);
for (i = 0; i < 3; i++) //for (i = 0; i <= 3; i++) 修改
{
for (j = 0; j < 3 - i; j++) //for (j = 0; j <= 3; j++) 修改
{
if (a[j] > a[j + 1])
{ //修改 缺了一对{}
temp=a[j];
a[j] = a[j+1];
a[j+1] = temp;
} //修改 缺了一对{}
}
}
for (i = 0;i<=3; i++)
{
printf("%d ", a[i]);
}
return 0;
}