数据结构之简单选择排序---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²);

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