老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

php中堆排序的實現原理是什么-創新互聯

這篇文章將為大家詳細講解有關php中堆排序的實現原理是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

成都創新互聯公司是一家朝氣蓬勃的網站建設公司。公司專注于為企業提供信息化建設解決方案。從事網站開發,網站制作,網站設計,網站模板,微信公眾號開發,軟件開發,微信平臺小程序開發,十余年建站對玻璃貼膜等多個領域,擁有多年的網站制作經驗。

這里以php作為描述語言較詳細講解堆排序原理,因保證程序可讀性,故不做優化,php程序中關于堆的一些概念如下:


假設n為當前數組的key則,n的父節點為 n>>1 或者 n/2(整除);n的左子節點l= n<<1 或 l=n*2,n的右子節點r=(n<<1)+1 或 r=l+1

$arr=array(1,8,7,2,3,4,6,5,9);

數組$arr的原形態結構如下:

             1
           /   
         8      7
       /         /
     2     3      4  6
    /
   5  9
heapsort($arr);print_r($arr);

排序后生成標準的小頂堆結構如下:

             1
           /  
         2      3
       /       / 
     4    5      6   7
    /
   8  9
既數組:array(1,2,3,4,5,6,7,8,9):


復制代碼 代碼如下:

function heapsort(&$arr)
{
        //求最后一個元素位
        $last=count($arr);
        //堆排序中通常忽略$arr[0]
        array_unshift($arr,0);
        //最后一個非葉子節點
        $i=$last>>1;
 
        //整理成大頂堆,較大的數整到堆頂,并將較大數和堆尾交換,并在之后的計算中忽略數組后端的較大數(last),直到堆頂(last=堆頂)
        while(true)
        {
                adjustnode($i,$last,$arr);
                if($i>1)
                {
                        //移動節點指針,遍歷所有非葉子節點
                        $i--;
                }
                else
                {
                        //臨界點last=1,既所有排序完成
                        if($last==1)break;
                        //當i為1時表示每一次的堆整理都將得到較大數(堆頂,$arr[1]),重復在根節點調整堆
                        swap($arr[$last],$arr[1]);
                        //在數組尾部按大小順序保留較大數,定義臨界點last,以免整理堆時重新打亂數組后面已排序好的元素
                        $last--;
                }
        }
        //彈出第一個數組元素
        array_shift($arr);
}
 
//整理當前樹節點($n),臨界點$last之后為已排序好的元素
function adjustnode($n,$last,&$arr)
{
        $l=$n<<1;        //$n的左孩子位
        if(!isset($arr[$l])||$l>$last) return ;
        $r=$l+1;        //$n的右孩子位
 
        //如果右孩子比左孩子大,則讓父節點的右孩子比
        if($r<=$last&&$arr[$r]>$arr[$l]) $l=$r;
        //如果其中子節點$l比父節點$n大,則與父節點$n交換
        if($arr[$l]>$arr[$n])                
        {
                //子節點($l)的值與父節點($n)的值交換
                swap($arr[$l],$arr[$n]);
                //交換后父節點($n)的值($arr[$n])可能還小于原子節點($l)的子節點的值,所以還需對原子節點($l)的子節點進行調整,用遞歸實現
                adjustnode($l,$last,$arr);
        }
}
 
//交換兩個值
function swap(&$a,&$b)
{
        $a=$a ^ $b;
         $b=$a ^ $b;
         $a=$a ^ $b;
}

關于php中堆排序的實現原理是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


分享名稱:php中堆排序的實現原理是什么-創新互聯
分享路徑:http://www.xueling.net.cn/article/dgjpjd.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 青苹果乐园高清免费看 | 亚洲女在线 | 四虎精品影库4HUTV四虎 | 国产性精品| 欧美精品一区二区蜜臀亚洲 | 少妇高潮灌满白浆毛片免费看 | 日本高清视频色wwwwww色 | 在线中文字幕有码中文 | 精品日韩一区二区三区 | av看片网站 | 好紧好湿好黄的视频 | 男女无套内射白将在线线国语 | 91?看视频| 色妞色视频一区二区三区四区 | 国产精品自在拍视频首页 | 18禁网站免费无遮挡无码中文 | 成人影院在线视频 | 啊灬啊灬啊灬啊高潮了 | 中文字幕55页 | 美女视频免费是黄的网站高清 | 妞干网精品 | 国产免费一级淫片a级中文 给我免费播放片在线中国 精品无码国产污污污免费网站 | 噜噜色.com| 少妇久久久久久久久久 | 久久99精品久久久久久野外 | 韩国美女三级 | 日本人妻仑乱少妇a级毛片 啊灬啊灬啊灬啊高潮了 | 黄色大片免费的 | 日本成人综合 | 火车上的一级毛片 | 调教小奴高潮惩罚PLAY露出 | 18禁网站免费无遮挡无码中文 | 我要看免费一级毛片 | 亚洲免费成人在线视频 | 国产精品国产三级国产专播一 | 二级大黄大片高清在线视频 | 美女久久久久久久久 | 亚洲色大成网站WWW永久 | 女人被草视频 | 推油少妇久久99久久99久久 | 日本伦理一区二区 |