欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > php計數排序算法的實現代碼(附四個實例代碼)

php計數排序算法的實現代碼(附四個實例代碼)

熱門標簽:南寧電話外呼系統線路 重慶外呼電銷系統多少錢 正規電銷機器人系統 南京3D地圖標注 辦理400電話哪家好點 濟源百應電銷機器人聯系方式 咸陽電銷 邢臺400電話辦理 嘟嘟云外呼系統

計數排序只適合使用在鍵的變化不大于元素總數的情況下。它通常用作另一種排序算法(基數排序)的子程序,這樣可以有效地處理更大的鍵。

總之,計數排序是一種穩定的線性時間排序算法。計數排序使用一個額外的數組C ,其中第i個元素是待排序數組 A中值等于 i的元素的個數。然后根據數組C 來將A中的元素排到正確的位置。

通常計數排序算法的實現步驟思路是:

1.找出待排序的數組中最大和最小的元素;

2.統計數組中每個值為i的元素出現的次數,存入數組C的第i項;

3.對所有的計數累加(從C中的第一個元素開始,每一項和前一項相加);

4.反向填充目標數組:將每個元素i放在新數組的第C[i]項,每放一個元素就將C[i]減去1。

PHP計數排序算法的實現代碼示例如下:

?php
function counting_sort($my_array, $min, $max)
{
  $count = array();
  for($i = $min; $i = $max; $i++)
  {
    $count[$i] = 0;
  }
 
  foreach($my_array as $number)
  {
    $count[$number]++;
  }
  $z = 0;
  for($i = $min; $i = $max; $i++) {
    while( $count[$i]-- > 0 ) {
      $my_array[$z++] = $i;
    }
  }
  return $my_array;
}
$test_array = array(3, 0, 2, 5, -1, 4, 1);
echo "原始數組 :\n";
echo implode(', ',$test_array );
echo "\n排序后數組\n:";
echo implode(', ',counting_sort($test_array, -1, 5)). PHP_EOL;

輸出:

原始數組 : 3, 0, 2, 5, -1, 4, 1

排序后數組 :-1, 0, 1, 2, 3, 4, 5

下面補充一個例子

1、計數排序只適用于整數在小范圍內排序

?php
$arr = [95,94,91,98,99,90,99,93,91,92];
function countSort($arr){
$max = $arr[0];
$min = $arr[0];
for($i=0;$icount($arr);$i++){
if($arr[$i]>$max){
$max = $arr[$i];
}
if($arr[$i]  $min){
$min = $arr[$i];
}
}
try{
$frequency = new SplFixedArray($max-$min+1);
for($i=0;$icount($arr);$i++){
if(empty($frequency[$arr[$i]-$min]))
$frequency[$arr[$i]-$min] = 0;
$frequency[$arr[$i]-$min] += 1;
}

$sum = 0;
for ($i=0; $i  count($frequency); $i++) {
$sum += $frequency[$i];
$frequency[$i] = $sum;
}

$splfixed = new SplFixedArray(count($arr));

for($i=(count($arr)-1);$i>=0;$i--){
$splfixed[$frequency[$arr[$i]-$min]-1] = $arr[$i];
$frequency[$arr[$i]-$min] -= 1;
}
}catch(RuntimeException $re){
echo "RuntimeException: ".$re->getMessage()."\n";
}
print_r($splfixed->toArray());
}
countSort($arr);
?>

輸出

Array
(
    [0] => 90
    [1] => 91
    [2] => 91
    [3] => 92
    [4] => 93
    [5] => 94
    [6] => 95
    [7] => 98
    [8] => 99
    [9] => 99
)

2、php計數排序

獲取序列中的最小值min和最大值max O(n)
統計min - max之間所有值在序列中的出現次數 O(n)
順序輸出min - max的所有值,次數為0不輸出,其余次數為多少就輸出多少 O(k) k為數據范圍

例如序列為: 2, 4, 6, 9, 4, 8

min = 2, max = 9, n為6,k為8

統計出現次數為

[2 => 1, 3 => 0, 4 => 2, 5 => 0, 6 => 1, 7 => 0, 8 => 1, 9 => 1]

輸出結果為

2, 4, 4, 6, 8, 9

很明顯,計數排序的復雜度為O(n) + O(k),也就是和數據量和數據范圍有關.
若n和k相近,則可認為是O(n)
同時,因為要統計出現次數,如果數據范圍過大而數據又很稀疏,造成的空間浪費比較大

class CountSort
{
  private $originalData = [];
  private $rangeMap = [];
  private $resultData = [];

  public function __construct($original = [])
  {
    $this->originalData = $original;
  }

  public function sort()
  {
    list($min, $max) = $this->calculateDataRange();
    $this->statisticNumberOfOccurrence($min, $max);
    $this->resultData = $this->generateResult();
    return $this->resultData;
  }

  protected function calculateDataRange()
  {
    $max = null;
    $min = null;

    foreach ($this->originalData as $value) {
      if (!is_null($max)) {
        if ($value > $max) {
          $max = $value;
        }
      } else {
        $max = $value;
      }

      if (!is_null($min)) {
        if ($value  $min) {
          $min = $value;
        }
      } else {
        $min = $value;
      }
    }

    return [$min, $max];
  }

  protected function statisticNumberOfOccurrence($min, $max)
  {
    for ($i = $min; $i = $max; $i++) {
      $this->rangeMap[$i] = 0;
    }

    foreach ($this->originalData as $value) {
      $this->rangeMap[$value]++;
    }
  }

  protected function generateResult()
  {
    $result = [];

    foreach ($this->rangeMap as $key => $value) {
      if ($value != 0) {
        for ($i = 0; $i  $value; $i++) {
          array_push($result, $key);
        }
      }
    }
    return $result;
  }
}

$testData = [2, 3, 4, 3, 10, 30, 20, 15, 10, 12, 33];

$countSort = new CountSort($testData);
echo 'pre>';
var_dump($countSort->sort());

輸出

pre>array(11) {
  [0]=>
  int(2)
  [1]=>
  int(3)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(10)
  [5]=>
  int(10)
  [6]=>
  int(12)
  [7]=>
  int(15)
  [8]=>
  int(20)
  [9]=>
  int(30)
  [10]=>
  int(33)
}

到此這篇關于php計數排序算法的實現代碼的文章就介紹到這了,更多相關php計數排序內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • java 實現計數排序和桶排序實例代碼
  • 10個python3常用排序算法詳細說明與實例(快速排序,冒泡排序,桶排序,基數排序,堆排序,希爾排序,歸并排序,計數排序)
  • js 計數排序的實現示例(升級版)
  • python實現計數排序與桶排序實例代碼
  • JAVA十大排序算法之計數排序詳解

標簽:唐山 通遼 黃山 平頂山 河南 武漢 隴南 南通

巨人網絡通訊聲明:本文標題《php計數排序算法的實現代碼(附四個實例代碼)》,本文關鍵詞  php,計數,排序,算法,的,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《php計數排序算法的實現代碼(附四個實例代碼)》相關的同類信息!
  • 本頁收集關于php計數排序算法的實現代碼(附四個實例代碼)的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    97久久精品人人做人人爽| 91精品1区2区| 欧美精品一区视频| 日韩福利视频导航| 一本加勒比波多野结衣| 7777精品伊人久久久大香线蕉 | 熟妇高潮一区二区| 欧美色窝79yyyycom| 9999热视频| 中国色在线观看另类| 国产精品一二二区| 欧美h片在线观看| 中文字幕一区在线观看| www.欧美.com| 欧美视频一区二区在线观看| 亚洲综合在线电影| 美女久久久久久久久| 91精品国产色综合久久ai换脸 | 色先锋资源久久综合| 亚洲人成影院在线观看| 91香蕉视频污| 欧美精品粉嫩高潮一区二区| 日韩精品福利网| 日本xxxxxxxxx18| 国产婷婷一区二区| 成人av一区二区三区| 在线免费观看日韩欧美| 夜夜嗨av一区二区三区四季av | 免费看日本黄色片| 欧美—级在线免费片| 成人av网址在线| 欧美性视频一区二区三区| 亚洲成av人片一区二区梦乃| av无码av天天av天天爽| 久久久亚洲精品一区二区三区| 国产成人一区在线| 欧美主播一区二区三区| 五月婷婷另类国产| 91社区视频在线观看| 亚洲欧洲一区二区在线播放| 美女网站视频在线观看| 2021久久国产精品不只是精品| 岛国一区二区在线观看| 欧美日韩你懂得| 久久99精品久久久久久动态图| 九九精品视频免费| 亚洲妇女屁股眼交7| 日本少妇xxxxx| 亚洲视频在线观看一区| 中文字幕一区二区人妻电影丶| 久久综合久久综合久久综合| 白白色 亚洲乱淫| 欧美一区二区视频网站| 国产精品一区二区久久精品爱涩| 在线观看国产91| 蜜臀av亚洲一区中文字幕| 精品人妻伦九区久久aaa片| 亚洲动漫第一页| 国产三级在线观看完整版| 一区二区三区四区不卡在线| 波多野结衣av在线免费观看| 中文字幕亚洲一区二区av在线| 亚洲激情 欧美| 国产精品色在线观看| 亚洲一区二区三区黄色| 国产精品色在线观看| 黄色录像a级片| 亚洲欧美激情小说另类| 国产人妻大战黑人20p| 亚洲激情在线激情| 免费成人深夜天涯网站| 亚洲亚洲精品在线观看| 国产视频精品免费| 日韩和欧美的一区| 日本道在线观看一区二区| 美脚の诱脚舐め脚责91 | 国产精品456露脸| 欧美麻豆精品久久久久久| 国产成人在线视频网站| 日韩一区二区三区观看| 91亚洲男人天堂| 国产女同互慰高潮91漫画| 亚洲av成人精品一区二区三区| 亚洲国产精品精华液2区45| 日本丰满少妇裸体自慰| 一区二区三区四区高清精品免费观看 | 国产精品美女久久福利网站| 9.1成人看片免费版| 亚洲综合图片区| 久久久久亚洲av片无码| 精品制服美女久久| 91精品欧美福利在线观看| 99精品视频中文字幕| 日本一区二区三级电影在线观看| 91精品小视频| 亚洲国产精品一区二区www在线| 欧美一区二区三区爽爽爽| 国产在线精品一区二区夜色| 日韩一级片在线观看| 高清中文字幕mv的电影| 亚洲精品成人在线| 日韩成人毛片视频| 国产suv精品一区二区883| 久久亚洲私人国产精品va媚药| 中文字幕一区二区人妻电影丶| 亚洲午夜久久久久久久久久久| 色婷婷av久久久久久久| 不卡一卡二卡三乱码免费网站 | 草草地址线路①屁屁影院成人| 亚洲与欧洲av电影| 91成人免费在线| 99久久夜色精品国产网站| 国产精品久久影院| 97精品在线播放| 国产精品伊人色| 国产亚洲成av人在线观看导航| 国产亚洲精品熟女国产成人| 美女脱光内衣内裤视频久久网站| 欧美二区乱c少妇| 中国特级黄色大片| 亚洲h动漫在线| 在线成人免费视频| 中国黄色片视频| 婷婷一区二区三区| 91.麻豆视频| 一女三黑人理论片在线| 日韩精品电影一区亚洲| 日韩一区二区三区三四区视频在线观看| 天天躁日日躁狠狠躁免费麻豆| 亚洲gay无套男同| 日韩一区二区免费在线观看| 懂色av粉嫩av蜜乳av| 麻豆精品一区二区av白丝在线| 日韩精品一区二区三区三区免费| 香蕉网在线播放| 九九热在线视频观看这里只有精品| 欧美成人猛片aaaaaaa| 色一情一交一乱一区二区三区| 黑人巨大精品欧美一区| 中文字幕乱码亚洲精品一区| 成人免费视频网站入口::| 99国产精品久久| 亚洲国产aⅴ天堂久久| 91精品欧美久久久久久动漫| 免费黄色在线视频| 国产精品影视网| 最新国产の精品合集bt伙计| 欧美亚洲日本国产| 7788色淫网站小说| 紧缚奴在线一区二区三区| 欧美国产丝袜视频| 日本道色综合久久| 在线免费播放av| 国产一区二区三区av电影| 国产精品国产三级国产a| 欧美午夜精品理论片a级按摩| 污污污www精品国产网站| 久久99国产精品成人| 国产精品美女久久久久久久| 欧美亚洲一区二区三区四区| a天堂视频在线观看| 国产自产高清不卡| 亚洲精品中文字幕在线观看| 91精品麻豆日日躁夜夜躁| 性少妇xx生活| 中文字幕第10页| 美女在线视频一区| 中文字幕一区二区三区不卡在线| 欧美日韩一区二区三区高清| 老牛影视av老牛影视av| 懂色av中文一区二区三区| 亚洲成人先锋电影| 久久久久久久电影| 欧美在线视频日韩| 国产三级av在线播放| 99久久精品国产一区| 日韩国产欧美三级| 国产精品美女www爽爽爽| 在线综合+亚洲+欧美中文字幕| 国产日韩精品中文字无码| 国模大尺度视频| 国产一区二区在线观看视频| 亚洲精品日韩综合观看成人91| 精品乱码亚洲一区二区不卡| 色天使久久综合网天天| 中文字幕成人动漫| 九色91porny| 国产精品一二三| 午夜私人影院久久久久| 国产精品视频一二三| 日韩视频一区二区三区| 色爱区综合激月婷婷| 白白色免费视频| 三上悠亚 电影| 国产成人在线色| 久久精品国产一区二区| 亚洲一区二区在线播放相泽| 国产色91在线| 欧美大片拔萝卜| 欧美日韩午夜精品|