环境:
ide clion;win10
先代码
#include
/**
设置一个嵌套循环
第一层循环为前九个(假设数组共6个元素),并在每次循环时将对应当前次数的数组元素设置为(假设为)最大值。
在第二层循环中,循环比较该元素之后的每个数组元素,并将每次比较结果中较大的数设置为最大值。
在第二层循环结束时,将最大值与开始时设置的最大值(假设的)数组元素进行互换。
当所有循环都完成以后,就将数组元素按照从大到小的顺序重新排列了
* @return
*/
int main() {
int i, j;
int a[6] = {6, 3, 8, 2, 9, 1};
int itemp;//假定的最大值,一般为默认第一个数
int iPos;
for (int i = 0; i < 5; i++) {
itemp = a[i];//假定当前循环内最大值为当前第一个元素
iPos = i;//假定当前最大值的下标
for (int j = i + 1; j < 6; j++) {
printf("内循环内第%d次比较,用数字 %d与第%d个数%d比较\n", j, itemp, j, a[j]);
if (a[j] > itemp) {
printf("%d比%d假设的itemp大,交换\n", a[j], itemp);
itemp = a[j];
iPos = j;
printf("现在的假定最大的值为%d,他在数组内的下标为%d\n", itemp, j);
}
}
printf("内循环内第%d次结束\n", i + 1);
printf("现在a[i]的值为%d,itemp的值为%d,a[ipos]的值为%d\n", a[i], itemp, a[iPos]);
a[iPos] = a[i];//把原来认为最大的值的下标i与i+1次后实际的最大得值的下标ipos交换
a[i] = itemp;//把最大的值放在i+1次排序后的第一个位置。仍然假设当前为为最大值,但是此次已经证明了i+1次
printf("外循环内第%d次结束\n\n", i);
}
for (int i = 0; i < 6; i++) {
printf("%d\t", a[i]);
if (i == 2) {
printf("\n");
}
}
return 0;
}
控制台输出解释
C:UsersvolvoCLionProjectsuntitledcmake-build-debuguntitled.exe
内循环内第1次比较,用数字 6与第1个数3比较
内循环内第2次比较,用数字 6与第2个数8比较
8比6假设的itemp大,交换
现在的假定最大的值为8,他在数组内的下标为2
内循环内第3次比较,用数字 8与第3个数2比较
内循环内第4次比较,用数字 8与第4个数9比较
9比8假设的itemp大,交换
现在的假定最大的值为9,他在数组内的下标为4
内循环内第5次比较,用数字 9与第5个数1比较
内循环内第1次结束
现在a[i]的值为6,itemp的值为9,a[ipos]的值为9
外循环内第0次结束
内循环内第2次比较,用数字 3与第2个数8比较
8比3假设的itemp大,交换
现在的假定最大的值为8,他在数组内的下标为2
内循环内第3次比较,用数字 8与第3个数2比较
内循环内第4次比较,用数字 8与第4个数6比较
内循环内第5次比较,用数字 8与第5个数1比较
内循环内第2次结束
现在a[i]的值为3,itemp的值为8,a[ipos]的值为8
外循环内第1次结束
内循环内第3次比较,用数字 3与第3个数2比较
内循环内第4次比较,用数字 3与第4个数6比较
6比3假设的itemp大,交换
现在的假定最大的值为6,他在数组内的下标为4
内循环内第5次比较,用数字 6与第5个数1比较
内循环内第3次结束
现在a[i]的值为3,itemp的值为6,a[ipos]的值为6
外循环内第2次结束
内循环内第4次比较,用数字 2与第4个数3比较
3比2假设的itemp大,交换
现在的假定最大的值为3,他在数组内的下标为4
内循环内第5次比较,用数字 3与第5个数1比较
内循环内第4次结束
现在a[i]的值为2,itemp的值为3,a[ipos]的值为3
外循环内第3次结束
内循环内第5次比较,用数字 2与第5个数1比较
内循环内第5次结束
现在a[i]的值为2,itemp的值为2,a[ipos]的值为2
外循环内第4次结束
9 8 6
3 2 1
Process finished with exit code 0