【发布时间】:2017-03-01 05:27:17
【问题描述】:
我并不真正理解这个使用嵌套 For 循环的基本排序算法背后的过程:
for(i=0; i<MAX; i++){
for(j=i; j<MAX; j++){
if(data[i] > data[j]){
tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
}
}
如果j=i 那么它不会只是循环并比较相同的数字,因为 i 和 j 在循环中都从 0 开始?
我尝试在谷歌上搜索有关这段特定代码的解释,但找不到任何有用的信息。
完整程序:
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
int main()
{
int data[MAX];
int i, j, tmp;
for(i=0;i<MAX;i++){
printf("Enter number %d: ", i);
scanf("%d", &data[i]);
}
for(i=0; i<MAX; i++){
for(j=i; j<MAX; j++){
if(data[i] > data[j]){
tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
}
}
printf("\nSorted List:\n");
for(i=0;i<MAX;i++){
printf("Item %d: %d\n", i, data[i]);
}
}
【问题讨论】:
-
出于好奇,您从何处获得此代码?似乎有人无法在选择排序和冒泡排序之间做出决定,然后最终得到了一个比两者都差的混蛋版本。
-
我一直在关注 Youtube 上的 C 教程,这个特定的代码来自这个视频:youtu.be/Dtbqs0M-B-s?t=19m9s
-
是的,在该练习的上下文中这是一个不错的算法,但请不要在其他地方使用它;-)