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

你可能感兴趣的:(c,选择排序)