PHP實現各種排序

來源:互聯網
上載者:User
<?php/** * 各種排序 * @author zhaojaingwei * @since 2011/11/21 16:14 * */$list = array(3,5,1,2,10,8,15,19,20);//快排function fast(&$list, $low, $high){    if($high - $low > 5){        while($low < $high){            $key = excute($list, $low, $high);            fast($list, $low, $key - 1);            //fast($list, $key + 1, $high);//普通遞迴實現            $low = $key + 1;//尾遞迴實現        }    }else{        insert($list);    }}//快排執行一次排序function excute(&$list, $low, $high){    swap($list, $low, ($low + $high)/2);    $temp = $list[$low];    while($low < $high){        while($low < $high && $list[$high] > $temp){            $high --;        }        $list[$low] = $list[$high];        while($low < $high && $list[$low] < $temp){            $low ++;        }                $list[$high] = $list[$low];    }    $list[$low] = $temp;    return $low;}//堆排序function heap(&$list){    buildHeap($list);    for($i = count($list) - 1; $i > 0; $i --){        swap($list, $i, 0);        heapfy($list, 0, $i - 1);     }}//建立堆function buildHeap(&$list){    for($i = (count($list) - 2)/2; $i >= 0; $i --){         heapfy($list, $i, count($list) - 1);      }}//維護堆function heapfy(&$list, $low, $high){    $temp = $list[$low];    for($i = ($low * 2 + 1); $i <= $high; $i = ($i * 2 + 1)){        if($i < $high && $list[$i] < $list[$i + 1]){            $i ++;           }        if($temp < $list[$i]){            swap($list, $i, $low);            $low = $i;        }else{            break;        }    }    $list[$low] = $temp;}//希爾排序function shell(&$list){    $a = 0;    $code = count($list)/3 + 1;    while($code >= 1){        for($i = $code; $i < count($list); $i ++){            $a ++;            if($list[$i] < $list[$i - $code]){                $temp = $list[$i];                $list[$i] = $list[$i - $code];                $j = $i - 2*$code;                                for(; $j >= 0 && $list[$j] > $temp; $j -= $code){                    $list[$j + $code] = $list[$j];                    $a ++;                 }                $list[$j + $code] = $temp;            }        }        $code = $code/3;    }    echo $a;}//直接插入排序function insert(&$list){    $a = 0;    for($i = 1; $i < count($list); $i ++){        $a ++;        if($list[$i] < $list[$i - 1]){            $temp = $list[$i];            $list[$i] = $list[$i - 1];                        $j = $i - 2;             for(; $list[$j] > $temp; $j --){                $a ++;                $list[$j + 1] = $list[$j];             }                        $list[$j + 1] = $temp;        }    }    echo $a;}//簡單選擇排序function select(&$list){    $a = 0;    for($i = 0; $i < count($list); $i ++){        $min = $i;        $a ++;        for($j = $i + 1; $j < count($list); $j ++){            $a ++;            if($list[$j] < $list[$min]){                $min = $j;            }        }            if($min != $i)            swap($list, $i, $min);    }    echo $a;}//冒泡排序function bubble(&$list){    $swap = TRUE;    $a = 0;    for($i = 0; $i < count($list) && $swap; $i ++){        $swap = FALSE;        $a ++;        for($j = count($list) - 2; $j >= $i; $j --){            $a ++;            if($list[$j] > $list[$j + 1]){                $swap = TRUE;                swap($list, $j, $j + 1);            }        }    }    echo $a;}//移動或交換函數function swap(&$list, $i, $j){    $temp = $list[$i];    $list[$i] = $list[$j];    $list[$j] = $temp;}?>
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.