为什么我需要多次为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]);
}
}
答案 0 :(得分:2)
这是一个非常基本的程序叫做选择排序。
维基文章是:Selection sort。
基本上在这个程序中,i
首先指向数组中的第一个元素。然后,j
指向下一个元素。如果元素j
小于元素i
,则会交换它们。交换后,内部for
循环仍然继续,然后j
指向它指向的下一个元素,并再次检查它是否更小,如果它是真的则交换。 / p>
我认为这有点令人困惑,所以我现在用一个例子来做。
假设我们有一个包含3个元素的数组:4 1 3
。 i
指向第一个元素4. j
指向第二个元素1.它检查元素j
是否小于元素i
。是的,所以它交换它们。现在数组是:143
。然后j
移动到下一个元素。它检查元素j
是否小于元素i
。不。然后,内循环结束。现在,i
指向4,j
指向3.它检查元素j
是否小于元素i
。是的,所以它交换它们。所以现在数组是134
。好吧,它继续进行直到i
小于3,或者数组元素的数量。因此,现在,数组按升序排序。
此图片来自前面提到的链接。红色是当前最小值。黄色是排序列表。蓝色是当前项目。
嗯,行
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]
的值。