C語言實現選擇排序-帶詳細解釋

環境:

ide clion;win10數組

先代碼

#include <stdio.h>

/**
 設置一個嵌套循環
第一層循環爲前九個(假設數組共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次結束ide

內循環內第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次結束ui

內循環內第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次結束debug

內循環內第4次比較,用數字 2與第4個數3比較
3比2假設的itemp大,交換
如今的假定最大的值爲3,他在數組內的下標爲4
內循環內第5次比較,用數字 3與第5個數1比較
內循環內第4次結束
如今a[i]的值爲2,itemp的值爲3,a[ipos]的值爲3
外循環內第3次結束code

內循環內第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 0ip

相關文章
相關標籤/搜索