c - 在 C 中填充数组时对数组进行排序

标签 c arrays sorting

我对这段代码有一个问题:当我输入负值作为输入程序的第一个值时,将其替换为 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/

相关文章:

java - 从 ArrayList 中检索样本

php根据字符串对数组进行排序

algorithm - O(n) 排序算法

c - 奇怪的错误,将 char 与字符串进行比较 (p == "cancel")

c - 如何使用 fwrite 将结构体的字符串成员写入文件?

在树莓派中创建makefile

c - 在 C 中,在声明中使用 ":"运算符而不是条件运算符

arrays - Kotlin - 数组中重复元素的索引

python - 在函数内操作全局数组的值

java - 我将如何完成这段java代码?