c - 按升序排列数字

标签 c arrays sorting

为什么我需要为i var声明这个for循环这么多次,这个j是什么意思?变量(for j=i+1;j<n;j++)

我怎么知道那个数字(i)>数字(j)。还有a = number[i]; number[i] 的值是多少这里?

#include <stdio.h>


/*
 * C program to accept N numbers and arrange them in an ascending order
 */

    void main() {

    int i, j, a, n, number[30];

    printf("Enter the value of N            \n");
   scanf("%d", &n);
   printf("Enter the numbers \n");

   for (i = 0; i < n; ++i) {

    scanf("%d", &number[i]);

  }

   for (i = 0; i < n; ++i) {

    for (j = i + 1; j < n; ++j) {

      if (number[i] > number[j]) {

        a = number[i];
        number[i] = number[j];
        number[j] = a;

      }

    }

  }

    printf("The numbers arranged in    ascending order are given below \n");

   for (i = 0; i < n; ++i){

    printf("%d\n", number[i]);

  }

}

最佳答案

这是一个非常基本的程序,称为选择排序。

维基文章是:Selection sort .

基本上在这个程序中,i 首先指向数组中的第一个元素。然后,j 指向下一个元素。如果元素j小于元素i,它们就会被交换。交换后,内部的 for 循环仍然继续,然后 j 指向它所指向的下一个元素,并再次检查它是否较小,然后交换如果这是真的。

我认为这有点令人困惑,所以我现在用一个例子来实现。

假设我们有一个包含 3 个元素的数组:4 1 3i 指向第一个元素 4。j 指向第二个元素 1。它检查元素 j 是否小于元素i。是的,所以它交换了它们。现在数组是:143。然后j移动到下一个元素。它检查元素j是否小于元素i。否。然后,内循环结束。现在,i 指向 4,j 指向 3。它检查元素 j 是否小于元素 i.是的,所以它交换了它们。所以现在数组是134。它会继续这个过程,直到 i 小于 3(即数组元素的数量)。因此,现在数组已按升序排序。

enter image description here

此图像取自前面提到的链接。红色是当前最小值。黄色是排序列表。蓝色是当前项目。

嗯,线路

a = number [i];

只是将数组number的元素i的值复制到变量a

线路

number [i] = number [j];

只是将数字数组的元素j的值复制到其元素i中。

线路

number [j] = a;

正在将a的值复制到数组number的元素j中。

基本上,这些行

a = number [i];
number[i] = number [j];
number [j] = a;

正在交换number [i]number [j]的值。

关于c - 按升序排列数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35377817/

相关文章:

c - 从 eclipse autotools 插件执行 automake

cuda内核没有访问数组的所有元素

c - 如果我有一个值的文本文件,我将如何读取该文件?

python - 加速嵌套 python 数组的操作

java - 如何更改 JavaFX BarChart 中排序方法中条形的位置?

c++ - 从数组中查找 MIN MAX 对

java - 并行化快速排序使其变慢

c - win32 - 如何将屏幕捕获为 8 位或 16 位位图?

arrays - 如何将字符串类型数组转换为变体类型数组 - Excel VBA

javascript - 如何用另一个给定的数组元素替换数组元素?