为什么我需要为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 3
。 i
指向第一个元素 4。j
指向第二个元素 1。它检查元素 j
是否小于元素i
。是的,所以它交换了它们。现在数组是:143
。然后j
移动到下一个元素。它检查元素j
是否小于元素i
。否。然后,内循环结束。现在,i
指向 4,j
指向 3。它检查元素 j
是否小于元素 i
.是的,所以它交换了它们。所以现在数组是134
。它会继续这个过程,直到 i
小于 3(即数组元素的数量)。因此,现在数组已按升序排序。
此图像取自前面提到的链接。红色是当前最小值。黄色是排序列表。蓝色是当前项目。
嗯,线路
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/