選擇排序就是這麼容易

愚昧者怨天尤人,無能者長吁短嘆,儒弱者頹然放棄。

選擇排序就是這麼容易

welcome rodert

選擇排序(Selection Sort)

科班的大多在學校時都學過數據結構和算法,不論是做算法還是做業務,排序都是經常要打交道的,還記得選擇排序嗎?前面寫了冒泡排序,一起來選擇排序看看

 

介紹

【百度百科】:選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理是:第一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小(大)元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的數據元素的個數爲零。選擇排序是不穩定的排序方法

實質:對比數組中前一個元素跟後一個元素的大小,如果後面的元素比前面的元素小則用一個變量k來記住他的位置,接着第二次比較,前面“後一個元素”現變成了“前一個元素”,繼續跟他的“後一個元素”進行比較如果後面的元素比他要小則用變量k記住它在數組中的位置(下標),等到循環結束的時候,我們應該找到了最小的那個數的下標了,然後進行判斷,如果這個元素的下標不是第一個元素的下標,就讓第一個元素跟他交換一下值,這樣就找到整個數組中最小的數了。然後找到數組中第二小的數,讓他跟數組中第二個元素交換一下值,以此類推。

時間複雜度: O(n²)

實現

算法描述(從小到大排序):

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。

重複第二步,直到所有元素均排序完畢。

 

動態圖演示:

 

選擇排序流程圖

圖片來源百度

圖片.png

 

Java代碼實現

  @Test
    public void selectionSort(){
        int [] arr = {5, 0, 7, 1, 2};//新建數組

        // 總共要經過 N-1 輪比較
        for (int i = 0; i < arr.length - 1; i++) {
            int  min = i;

            // 每輪需要比較的次數 N-i
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[min] > arr[j]) {
                    // 記錄目前能找到的最小值元素的下標
                    min = j;
                }
            }

            // 將找到的最小值和i位置所在的值進行交換
            if (min != i) {
                int tmp = arr[min]; //臨時變量
                arr[min] = arr[i];
                arr[i] = tmp;
            }
        }

        // 返回結果
        for (int i:arr) {
            System.out.println(i);
        }
    }

 

轉載是一種動力 分享是一種美德 開源是一種信仰

—END—

rodert

更多文章後面會持續分享,有特別需要可以提前留言。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章