问题:想用冒泡排序法从键盘输入10个整数后从小到大排序,程序运行后回车却无法进行排序,想知道这是为什么
代码:
#include
#include
int main()
{
int a[10];
int i,j,t;
for(j=1;j<9;j++)
{scanf("%d",&a[i]);
for(i=0;i<9-j;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
#include<stdio.h>
// 从后往前冒泡
void sort(int a[],int n)
{
int i,j,t,noswap;
for(i=0;i< n-1; i++)
{
noswap=1;
for(j=n-1;j>i;j--)
if(a[j-1]>a[j])
{
t=a[j-1];
a[j-1]=a[j];
a[j]=t;
noswap=0;
}
if(noswap)
break;
}
}
// 从前往后冒泡
void sort1(int a[],int n)
{
int i,j,t,noswap;
for(i=0;i< n-1; i++)
{
noswap=1;
for(j=0;j<n-1-i;j++)
if(a[j+1]<a[j])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
noswap=0;
}
if(noswap)
break;
}
}
int main()
{
int n;
printf("Input n:");
scanf("%d", &n);
printf("Input %d numbers:", n);
int a[n];
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
sort1(a, n);
printf("Sorting results:");
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
return 0;
}
数组输入和排序得分开,修改如下,供参考:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[10] = {0};
int i, j, t;
for (j = 0; j < 10; j++) // for(j=1;j<9;j++) 修改
{
scanf("%d", &a[j]); // scanf("%d", &a[i]); 修改
} // 修改
for (j = 0; j < 9; j++) // 修改
{
for (i = 0; i < 9 - j; i++)
{
if (a[i] > a[i + 1])
{
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
}
for (i = 0; i < 10; i++)
printf("%d ", a[i]);
return 0;
}
该回答引用GPTᴼᴾᴱᴺᴬᴵ
在这段代码中,for循环的循环变量i没有在外层循环中被初始化,这意味着在第一次内层循环中,程序将尝试访问未初始化的a[i]元素,这可能导致程序崩溃或产生意外行为。为了解决这个问题,可以将i的初始化移到外层循环中:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[10];
int i,j,t;
for(j=1;j<9;j++)
{
for(i=0;i<9-j;i++)
{
scanf("%d",&a[i]);
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
这样修改后,程序应该可以正确排序输入的整数。
若有帮助,望给个采纳哈,谢谢!
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[10];
int i=0, j, t;
// 先输入10个数字
for (j = 0; j < 10; j++)
{
scanf_s("%d", &a[i++]);
}
// 再对10个数字进行排序
for (i = 0; i < 10; i++)
{
for (j = i + 1; j < 10; j++)
{
if (a[i] > a[j]) // 升序排序
{
t = a[j];
a[j] = a[i];
a[i] = t;
}
/*if (a[i] < a[j]) // 降序排序
{
t = a[j];
a[j] = a[i];
a[i] = t;
}*/
}
}
// 输出排序后的数字
for (i = 0; i < 10; i++)
printf("%d ", a[i]);
system("Pause");
return 0;
}