成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

php實現(xiàn)4種排序算法

FullStackDeveloper / 1703人閱讀

摘要:冒泡排序?qū)τ谝粋€長度為的數(shù)組,我們需要排序輪,每輪要比較次。對此我們可以用雙重循環(huán)語句,外層循環(huán)控制循環(huán)輪次,內(nèi)層循環(huán)控制每輪的比較次數(shù)。將這個元素插入到已經(jīng)排序好的序列內(nèi)。

冒泡排序
對于一個長度為N的數(shù)組,我們需要排序 N-1 輪,每 i 輪 要比較 N-i 次。對此我們可以用雙重循環(huán)語句,外層循環(huán)控制循環(huán)輪次,內(nèi)層循環(huán)控制每輪的比較次數(shù)。
$arr = [2,3,1,8,4,5];
$length = count($arr);
for ($i=0;$i<$length;$i++) {
    for ($j=0;$j<$i-1;$j++) {
        if ($arr[$i] > $arr[$j]) {
            $tmp = $arr[$j];
            $arr[$j] = $arr[$i];
            $arr[$i] = $tmp;
        }
    }
}

for ($i=0;$i<$length-1;$i++) {
    echo "i:" . $i  . "    ";
    for ($j=0;$j<$length-1-$i;$j++) {
        echo "j:" .$j . "  ";
        if ($arr[$j] > $arr[$j+1]) {
            $tmp = $arr[$j];
            $arr[$j] = $arr[$j+1];
            $arr[$j+1] = $tmp;
            print_r($arr);
        }
    }
    echo "
";
}
print_r($arr);
選擇排序
每一輪比較都可以確定一個位置,對于N個數(shù),比較N-1輪可以確定N個位置上的數(shù),因為確定了N-1個位置,最后一個位置也就確定了
 for($i=0; $i<$count-1; $i++){
          //定義最小位置
          $minIndex = $i;
          for($j= $i+1; $j<$count; $j++){
             if($arr[$j] < $arr[$minIndex]){
                 $minIndex = $j;
             }
         }
         if($i != $minIndex){
               $temp = $arr[$i];
               $arr[$i] = $arr[$minIndex];
               $arr[$minIndex] = $temp;
               
        }
     }
快速排序
1、先從數(shù)列中取出一個數(shù)作為基準(zhǔn)數(shù)

2、分區(qū)過程,將比這個數(shù)大的數(shù)全放到它的右邊,小于或等于它的數(shù)全放到它的左邊

3、再對左右區(qū)間重復(fù)第二步,直到各區(qū)間只有一個數(shù)

function quick_sort($arr)
{
    if (empty($arr)) {
        return $arr;
    }
    $length = count($arr);
    if ($length == 1) {
        return $arr;
    }
    // 將第一個值設(shè)置為基準(zhǔn)值
    $base = $arr[0];
    $left = $right = [];
    for($i = 1; $i < $length; $i++) {
        if ($base < $arr[$i]) {
            $left[] = $arr[$i];
        } else {
            $right[] = $arr[$i];
        }
    }
    // 遞歸調(diào)用
    $left = quick_sort($left);
    $right = quick_sort($right);
    return array_merge($left, [$base], $right);
}
插入排序
對于插入排序,我的理解是 兩層循環(huán)下 逐漸增加排序的數(shù)量,不斷的重復(fù)比較直到得到最終的排序結(jié)果,跟我最初的比較排序思路基本是一致的
function insert_sort($arr) {
            //區(qū)分 哪部分是已經(jīng)排序好的
            //哪部分是沒有排序的
            //找到其中一個需要排序的元素
            //這個元素 就是從第二個元素開始,到最后一個元素都是這個需要排序的元素
            //利用循環(huán)就可以標(biāo)志出來
            //i循環(huán)控制 每次需要插入的元素,一旦需要插入的元素控制好了,
            //間接已經(jīng)將數(shù)組分成了2部分,下標(biāo)小于當(dāng)前的(左邊的),是排序好的序列
            for($i=1, $len=count($arr); $i<$len; $i++) {
                //獲得當(dāng)前需要比較的元素值。
                $tmp = $arr[$i];
                //內(nèi)層循環(huán)控制 比較 并 插入
                for($j=$i-1;$j>=0;$j--) {
                    //$arr[$i];//需要插入的元素; $arr[$j];//需要比較的元素
                    if($tmp < $arr[$j]) {
                        //發(fā)現(xiàn)插入的元素要小,交換位置
                        //將后邊的元素與前面的元素互換
                        $arr[$j+1] = $arr[$j];
                        //將前面的數(shù)設(shè)置為 當(dāng)前需要交換的數(shù)
                        $arr[$j] = $tmp;
                    } else {
                        //如果碰到不需要移動的元素
                        //由于是已經(jīng)排序好是數(shù)組,則前面的就不需要再次比較了。
                        break;
                    }
                }
            }
            //將這個元素 插入到已經(jīng)排序好的序列內(nèi)。
            //返回
            return $arr;
        }

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28449.html

相關(guān)文章

  • PHP數(shù)組排序算法實現(xiàn)(14)

    摘要:本文將介紹快速排序計數(shù)排序梳排序堆排序歸并排序希爾排序選擇排序插入排序地精排序聯(lián)合冒泡排序雞尾酒排序冒泡排序奇偶排序使用標(biāo)志的冒泡排序種排序算法的實現(xiàn)。是一種不穩(wěn)定的排序算法。 本文將介紹快速排序、計數(shù)排序、梳排序、堆排序、歸并排序、希爾排序、選擇排序、插入排序、地精排序、聯(lián)合冒泡排序、雞尾酒排序、冒泡排序、奇偶排序、使用標(biāo)志的冒泡排序14種排序算法的實現(xiàn)。本文是由于閱讀了文章《測試評...

    aisuhua 評論0 收藏0
  • PHP 的方式實現(xiàn)的各類算法合集

    摘要:數(shù)據(jù)項是數(shù)據(jù)的不可分割的最小單位。數(shù)據(jù)項是對客觀事物某一方面特性的數(shù)據(jù)描述。數(shù)據(jù)對象是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個子集。數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)元素之間的相互關(guān)系稱為邏輯結(jié)構(gòu)。 項目地址 https://github.com/m9rco/algo... 每周最少一更,求出題,求虐待 At least once a week, ask for problems and abuse 簡...

    Karrdy 評論0 收藏0
  • PHP 的方式實現(xiàn)的各類算法合集

    摘要:數(shù)據(jù)項是數(shù)據(jù)的不可分割的最小單位。數(shù)據(jù)項是對客觀事物某一方面特性的數(shù)據(jù)描述。數(shù)據(jù)對象是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個子集。數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)元素之間的相互關(guān)系稱為邏輯結(jié)構(gòu)。 項目地址 https://github.com/m9rco/algo... 每周最少一更,求出題,求虐待 At least once a week, ask for problems and abuse 簡...

    pakolagij 評論0 收藏0
  • PHP 的方式實現(xiàn)的各類算法合集

    摘要:數(shù)據(jù)項是數(shù)據(jù)的不可分割的最小單位。數(shù)據(jù)項是對客觀事物某一方面特性的數(shù)據(jù)描述。數(shù)據(jù)對象是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個子集。數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)元素之間的相互關(guān)系稱為邏輯結(jié)構(gòu)。 項目地址 https://github.com/m9rco/algo... 每周最少一更,求出題,求虐待 At least once a week, ask for problems and abuse 簡...

    leonardofed 評論0 收藏0
  • [討論]php 排序系列的函數(shù)內(nèi)部的C實現(xiàn)是用了哪排序算法?

    摘要:在算法中,比快速排序還快的,無疑是基數(shù)排序,粗略看了一下算法,可能是基礎(chǔ)排序中的桶排序。桶排序是穩(wěn)定的桶排序是常見排序里最快的一種,比快排還要快大多數(shù)情況下桶排序非???,但是同時也非常耗空間以空間換時間 ext/standard/php_array.h https://github.com/php/php-src/blob/master/ext/standard/php_array....

    chanthuang 評論0 收藏0

發(fā)表評論

0條評論

FullStackDeveloper

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<