按升序排列数字

时间:2016-02-13 08:37:40

标签: c arrays sorting

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

我如何知道该号码(i)&gt;号码(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]);

  }

}

1 个答案:

答案 0 :(得分:2)

这是一个非常基本的程序叫做选择排序。

维基文章是:Selection sort

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

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

假设我们有一个包含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];

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

该行

number [i] = number [j];

只是在元素j中复制数字数组的元素i的值。

该行

number [j] = a;

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

基本上,行

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

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