我对这段代码有一个问题:当我输入负值作为输入程序的第一个值时,将其替换为 0。如果我在其他任何地方输入它,它工作正常。为什么会出现这样的情况呢?我该如何修复它?提前致谢!
#include <stdio.h>
#define N 5
int main () {
float a[N], temp;
int i, j;
for (i=0; i<N; i++) {
scanf ("%f", &a[i]);
for (j=0; j<N; j++)
if (a[i]<a[j]) {
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
for (i=0; i<N; i++)
printf ("%.2f ", a[i]);
return 0;
}
最佳答案
你们很接近。正如其他人提到的,问题是 a
未初始化,因此在您填充之前它充满了垃圾。但如果你初始化它,它将充满零,这会扰乱排序。
诀窍是仅对您已填充的位置进行排序。那将是 i
.
for (i=0; i < N; i++) {
scanf ("%f", &a[i]);
for (j=0; j < i; j++) {
if (a[i]<a[j]) {
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
注意它是j < i
。这不是j <= i
因为将元素与其自身进行比较是没有意义的
顺便说一句,这是一种低效的排序方式。基本上是bubble sort ,但与冒泡排序不同,如果数组已排序,冒泡排序可能会提前停止,您将始终执行 ((n-1)*n)/2快速变大的操作。在 100 个元素中,您将进行 4950 次比较。
您最好阅读所有内容并对整个列表进行排序。
关于c - 在 C 中填充数组时对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42035954/