ホームページ >バックエンド開発 >PHPチュートリアル >PHP ヒープソートの実装原理とアプリケーションコード_PHP チュートリアル

PHP ヒープソートの実装原理とアプリケーションコード_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:08:01844ブラウズ

phpチュートリアル ヒープソートの実装原理とアプリケーションコード
author: lajabs
email: agl0dhlvqgdtywlslmnvbq==

この記事では、記述言語としてPHPを使用してヒープソートの原理をより詳しく説明しています
プログラムの読みやすさを確保するために、いいえ最適化が完了しました。


PHP プログラムのヒープに関するいくつかの概念:
n が現在の配列のキーであると仮定すると、
n の親ノードは n>>1 または n/2 (割り切れる) です。
n のノードは l= n*/
$arr=array(1) ,8,7,2,3,4 ,6,5,9);
/*
配列 $arr の元の構造は次のとおりです。 3 4 6
/
5 9

*/
ヒープ チュートリアルort( $arr);
print_r($arr);
/*

ソート後、標準のスモールトップヒープ構造が次のように生成されます:

4 5 6 7
/
8 9

は配列です:array(1 ,2,3,4,5,6,7,8,9)
*/

function heapsort(&$arr)
{
$arr[0]
arr

// 大きな上部ヒープに配置し、最大の数値をヒープの先頭に移動し、最大数値をヒープの末尾と交換し、後続の計算では配列の後端の最大数値 (最後) を無視します。ヒープの先頭まで (last = ヒープの先頭)
//Mo。ノード ポインタを取得し、すべての非リーフ ノードを走査します
}
// i が 1 の場合、各ヒープソートが最大数を取得することを意味します(heap Top, $ arr [1])、ルート ノードでヒープを繰り返します
swap ($ arr [$ last], $ arr [1]); ヒープをソートするときに配列の後ろにあるソートされた要素が再び中断されるのを避けるため️

//クリティカルポイント $last の後の現在のツリーノード ($n) を整理します
functionAdjustnode($n,$last,&$arr)
{
位置
if (! Isset ( $ arr [$ l]) || $ l & gt; $ last) Return; $ r = $ l+1; $ n 子が大きい場合は、親ノードの右側の子を大きくします。 than
if($r<=$last&&$arr[$r]>$arr[$l]) $l=$r;
//子ノード $l の場合 If ($arr[$l]> $arr[$n]) が親ノード $n より大きい場合、親ノード $n と交換します。 If($arr[$l]>$arr[$n])
n) 値交換
スワップ( $arr[$l],$arr[$n]); $l)の子ノードの値なので、アトミックノード($l)の子ノードを調整し、再帰を使用して実装する必要があります
AductNode($ l、$ last、$ arr); '' sの使用を使用する - - - - - - 2つの値を交換する

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/444907.html技術記事 PHP チュートリアル ヒープ ソートの実装原理とアプリケーション コード 著者: lajabs 電子メール: agl0dhlvqgdtywlslmnvbq== この記事では、プログラムを読みやすくするために、記述言語として PHP を使用してヒープ ソートの原理を詳細に説明します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。