PHP 排序整數演算法 - Radix sort 實做

PHP 排序有 sortksort... 等等一堆可以使用, 也都可以拿來排序整數, 速度不一定會比這個演算法慢, 請自行注意使用~ 🙂

Radix sort 演算法說明、實做

Radix sort 的演算法, 非常簡單, 看一次就記起來了, 上次突然想到就實做來玩玩, 跟 Linux shell 的 sort 比速度, 沒有比較快(偶爾會比 sort 快)

Radix sort 的演算法主要 針對"整數數字"做排序, 作法使用空間換取時間, 將數字都塞進陣列(紀錄次數), 最後將陣列依照順序印出即可.

Radix sort 演算法詳細說明可見下述文章:

註: 上述文章也有範例, 下述是之前臨時想到就隨手寫得, 都可以參考玩玩看.

範例程式: vim sort_int.php # 排序 filename.txt

  1. <?php
  2. $data = array();
  3. $max  = 0;
  4. $min  = 99999;
  5. $fh = fopen('filename.txt', 'r') or die('File can not read.');
  6. if ($fh) {
  7.     while ($line = fgets($fh, 10)) {
  8.         $i = trim($line);
  9.         $data[$i] = isset($data[$i]) ? $data[$i] + 1 : 1;
  10.         if ($max < $i)
  11.             $max = $i;
  12.         if ($min > $i)
  13.             $min = $i;
  14.     }
  15.     for ($i = $min; $i <= $max; $i++) {
  16.         if (isset($data[$i])) {
  17.             for ($j = 0; $j < $data[$i]; $j++)
  18.                 echo $i . "\n";
  19.         }
  20.     }
  21.     if (!feof($fh)) {
  22.         echo "Error: unexpected fgets() fail\n";
  23.     }
  24.     fclose($fh);
  25. }
  26. ?>

執行: php sort_int.php > sort_done.txt

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈PHP 排序整數演算法 - Radix sort 實做〉中有 1 則留言

  1. 偶然 google 發現這篇文章,看到來源網站有人回應,這個演算法應該是叫 counting sort。radix sort 是對特定的基底(radix)的每個 digit 做排序,概念有點類似,但是 counting sort 完全沒有「比較」的過程,取而代之的是需要更大的額外空間

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料