选择排序c语言详细注释,C语言实现选择排序-带详细解释

环境:

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 63 2 1Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值