【經典算法】直接選擇排序


 

直接選擇排序

數組分成有序區和無序區,初始時整個數組都是無序區,然后每次從無序區選一個最小的元素直接放到有序區的最后,直到整個數組變有序區。

選擇排序的步驟是這樣的:

首先,找到數組中最小的元素,將它和數組的第一個元素交換位置。

第二步,在剩下的元素中繼續尋找最小的元素,和數組的第二個元素交換位置。

如此循環,直到整個數組排序完成。

#include <stdio.h>

    int main () {
    int list[15] = {5,23,86,21,43,67,45,34,58,23,102,123,11,22,1};
    int i, j, temp,min;
    for(i = 0; i< 15;i++)
    {
        //令最小值等於無序區的第一個值
        min = list[i];
        temp = i;
        //找到無序區的最小值
        for(j = i; j<15;j++)
        {
            if(min>list[j])
            {   
                temp = j;
                min = list[j];
            }
            
        }
        //交換
        list[temp] = list[i];
        list[i] = min;
        temp = 0;
        
    }
    for (i = 0;i < 15; i++)
        printf("%d\n",list[i]);
}

 

 

圖解選擇排序

我們以[ 8,2,5,9,7 ]這組數字做例子。

第一次選擇,先找到數組中最小的數字 2 ,然后和第一個數字交換位置。(如果第一個數字就是最小值,那么自己和自己交換位置,也可以不做處理,就是一個 if 的事情)

 

 

 

第二次選擇,由於數組第一個位置已經是有序的,所以只需要查找剩余位置,找到其中最小的數字5,然后和數組第二個位置的元素交換。

 

 

第三次選擇,找到最小值 7 ,和第三個位置的元素交換位置。

 

 

第四次選擇,找到最小值8,和第四個位置的元素交換位置。

 

 

最后一個到達了數組末尾,沒有可對比的元素,結束選擇。

如此整個數組就排序完成了。

 

參考:https://mp.weixin.qq.com/s/D0-lOLFkfppTnvN9yK_lBg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM