<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • c語言選擇排序法代碼(c語言三種排序方法)


    選擇排序,從字面上來說,就是要把一組數列中的元素給選擇出來。

    比方說給定一組數列,要求把其中的元素進行從小到大排序,那么只需要在進行每次排序的時候,都把最小的元素給選擇出來,放在數列的第一位即可,第二次排序第三次排序同理,把后面數列中的最小元素給選擇出來,放在已經排序好的元素的末尾,直到最后需要排序的元素沒有為止。

    這里有幾個注意點:

    1、第一次排序是遍歷整個數列,把最小的元素給選擇出來放在第一位。

    2、第二次排序開始是遍歷除了第一個元素外的后面的數列,把后面數列當中最小的元素給選擇出來放到第一個元素后面一位。

    3、第三次排序同理,直到最后一次排序把整個數列以從小到大的方式打印出來。

    用C語言實現選擇排序,這是一種最為直觀的排序算法

    可以發現,在進行選擇排序的過程中,每次最為重要的就是選擇出一個最小的元素然后進行排序。

    理清邏輯,畫好流程圖

    為了讓整個流程更加清晰,我畫了一張流程圖,也能在以后來幫助自己理解。

    用C語言實現選擇排序,這是一種最為直觀的排序算法

    這里最容易搞混的地方,我在自己寫代碼理邏輯的時候也容易出現問題,那就是這個交換位置到底應該放在哪邊,所以,為了講的更清楚一些,我打算用實際例子來舉例一下。

    外循環是遍歷數組中所有的元素,內循環是遍歷除了當前元素的所有元素,然后要進行一個條件判斷,也就是找出最小的元素,之后與當前元素交換位置。

    那么內循環進行遍歷的時候,可能會遍歷到許多個比當前元素要小的元素,如果在這里進行位置交換,那豈不是就會交換好多次,與我們期望的不符,所以交換位置不能放在內循環里。

    所以邏輯應該改為:在進行完內循環后,把最小元素給選擇出來,然后再交換位置。

    代碼實現:

    //選擇排序
    #include<stdio.h>
    int main() {
        int Select[9] = {100, 3, 7, 6, 55, 29, 33, 10, -12};
        int Temp = 0;
        int index = 0;
        for(int i = 0; i < 9; i++){
            index = i;
            for(int j = i+1; j<9;j++){
                if(Select[j]<Select[index]){
                    index = j;
                }
            }
            Temp = Select[i];
            Select[i] = Select[index];
            Select[index] = Temp;
            for(int i = 0; i < 9; i++){
                printf("%d ", Select[i]);
            }
            printf("n");
        }
    }

    大家可以看到,交換位置的邏輯與冒泡排序和直接插入排序交換位置的邏輯并無多大差別,無非這里要進行交換位置的時候必須得把最小元素給選擇出來再交換位置,而不是找到一個最小元素就直接交換位置。

    測試結果

    用C語言實現選擇排序,這是一種最為直觀的排序算法

    總結

    總的來說,選擇排序其實難度不大,但是如果剛開始學習數據結構的話,的確會有些不清楚,最重要的就是要理清邏輯,理清邏輯之后,因為內循環的主要目的是找到最小元素,如果在內循環中交換位置的話,那就沒有意義了,所以要在內循環外交換位置。

    總的來說,難度不大,測試結果也與我們最終期望得到的結果相同。

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费