數據結構之簡單選擇排序---PHP版

簡單選擇排序是一種儘量減少交換的一種排序方法。

一、在之前介紹的冒泡排序算法中,它的思想就是不斷進行交換不斷進行交換,而簡單選擇排序就是找準一個最小值之後在進行交換。舉個生活中簡單的例子,很多人喜歡炒股,有一些人喜歡快買快賣從中快速賺取差額,但有一些喜歡看準時機等待時機再進行買入跟買出,這跟冒泡排序跟簡單選擇排序的思路很像。

二、實現的原理

每一次進行比較,不進行交換而記錄最小值下標。就交換一次就是將最小值交換過來。

 

通過i次循環找到每次循環中的最小值的下標,將i位置的值跟最小值進行替換。如i=1時,min=1,依次跟j進行比較,如果min對應的值大於j對應的值,則min跟j進行交換,依次循環比較下去,直到集合末尾。判斷i跟min是否一致,一致的話代表min還是i的位置所以不需要替換,但是如果不一致,i跟min對應位置的值交換,這樣的話i位置對應的值就是最小值。接下來i++,就可以以此類推的進行尋找最小值。

三、代碼實現(PHP版本)

<?php

function EasySelect(&$array)
{
    $length = count($array) - 1;
    for ($i = 0; $i <= $length; $i++) {
        $min = $i;
        for ($j = $i + 1; $j <= $length; $j++) {
            if ($array[$min] > $array[$j]) {
               $min = $j;
            }
        }
        if ($i != $min){
            swap($array,$i,$min);
        }
    }
}

其他的swap就是簡單的交換函數我就不寫了。

四、時間複雜度分析(穩定排序)

最好的情況:基本全部有序,不需要進行0次交換。進行比較的次數爲1+2+3+4+...n-1=n*(n-1)/2次;

最壞的情況:全部無需,需要n-1次交換,進行比較的次數也跟最好的情況一樣;

排序的時間總和等於交換時間+比較時間,則時間複雜度爲O(n²);

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