ホームページ > バックエンド開発 > PHPチュートリアル > PHP_phpスキルで基数ソートを実装する方法の詳細な説明

PHP_phpスキルで基数ソートを実装する方法の詳細な説明

韦小宝
リリース: 2023-03-17 18:44:01
オリジナル
1344 人が閲覧しました

この記事では、主に基数ソートのPHP実装方法を紹介し、基数ソートの原理、実装方法、および関連するPHP操作スキルを例の形で分析します。この記事では、基数ソートのPHP実装方法について説明します。例とともに。みんなで共有して参考にしてみましょう!

基数ソートは、キーワードの各ビットの値に基づいており、ソートされた N 個の要素に対して「配布」と「収集」の複数のパスを実行することによってソートされます。

具体的な例を使用して、基数ソートがどのように実行されるかを示しましょう。

初期シーケンスが R {50, 123, 543, 187, 49, 30, 0, 2, 11, 100} であると仮定します。

どのアラビア数字でも、各桁の底は 0 ~ 9 で表されることがわかっています。

つまり、0 ~ 9 を 10 個のバケットとみなした方がよいでしょう。

まずシーケンスの一桁の数字に従って分類し、指定されたバケットに分割します。例: R[0] = 50、1 桁は 0、この数値を 0 番のバケットに保存します。

分類後、各バケツから0番から9番まで順番にすべての番号を取り出します。

この時、得られた系列は一桁の増加傾向を持つ系列となっています。

1 桁で並べ替えます: {50、30、0、100、11、2、123、543、187、49}。

次に、この方法で十の位と百の位を並べ替えると、最終的に並べ替えられた順序が得られます。


<?php
/**基数排序**/
/*
* 获取第几位上的数字
*
*百位数 = 2345%1000/100
*/
function getN($num,$N){
  $value = 10;
  for($i=1;$i<$N;$i++){
    $value = $value * 10;
  }
  $M = (int)(($num % $value /($value/10)));
  return $M;
}
/*
*/
function paixu($arr)
{
  $flag = 1;//该次位数上是否全为0标志位,全为0 flag=0
  for($M=1;$flag!=0;$M++)
  {
    $flag = 0;
    if($M > 1){
      $m = 0;
      for($j=0;$j<10;$j++){
        for($k=0;$k<count($b[$j]);$k++){
          if($b[$j][$k]!=0)
          $arr[$m++] = $b[$j][$k];//将容器中的数按序取出,进行下一次排序
        }
      }
      $b = array();//再给b附新值前要清空数组中原有的数据
    }
    for($i=0;$i<count($arr);$i++)
    {
      $thisNum = getN($arr[$i],$M);
      if($thisNum!=0) $flag = 1;
      $b[$thisNum][] = $arr[$i];//将数组中的数放入容器中
    }
  }
  print_r($arr);
  //var_dump($b);
}
/**基数排序**结束**/
paixu(array(65,3,45,6,7,8,31,100,1000,1234))
?>
ログイン後にコピー


実行結果:


コードをコピー コードは次のとおりです:

Array ( [0] => 3 [1] => 6 [2] => ; 7 [ 3] => 8 [4] => 45 [7] => 1000 1234 )

基数ソートは、重複する数値を検索したり、間隔の数値を検索したりするためにも使用できます。実際、コードは重要ではありません (コードはまだ改善する必要があります)、アイデアが鍵です

関連する推奨事項:

PHPソート実装

PHPソート二次元配列アルファベットソート実装コード

phpソートアルゴリズム(バブルソート、クイックソート)_PHPチュートリアル

以上がPHP_phpスキルで基数ソートを実装する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート