來源:藏色散人 發(fā)布時間:2019-03-11 11:21:58 閱讀量:1092
計數(shù)排序(Counting sort)是一種根據(jù)小整數(shù)鍵對一組對象排序的算法;也就是說,它是一個整數(shù)排序算法。它通過計算具有不同鍵值的對象的數(shù)量,并對這些數(shù)量使用算術(shù)來確定輸出序列中每個鍵值的位置。
計數(shù)排序只適合使用在鍵的變化不大于元素總數(shù)的情況下。它通常用作另一種排序算法(基數(shù)排序)的子程序,這樣可以有效地處理更大的鍵。
總之,計數(shù)排序是一種穩(wěn)定的線性時間排序算法。計數(shù)排序使用一個額外的數(shù)組C ,其中第i個元素是待排序數(shù)組 A中值等于 i的元素的個數(shù)。然后根據(jù)數(shù)組C 來將A中的元素排到正確的位置。
通常計數(shù)排序算法的實現(xiàn)步驟思路是:
1.找出待排序的數(shù)組中最大和最小的元素;
2.統(tǒng)計數(shù)組中每個值為i的元素出現(xiàn)的次數(shù),存入數(shù)組C的第i項;
3.對所有的計數(shù)累加(從C中的第一個元素開始,每一項和前一項相加);
4.反向填充目標(biāo)數(shù)組:將每個元素i放在新數(shù)組的第C[i]項,每放一個元素就將C[i]減去1。
PHP計數(shù)排序算法的實現(xiàn)代碼示例如下:
1234567891011121314151617181920212223242526 <?phpfunction 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 "原始數(shù)組 :\n";echo implode(', ',$test_array );echo "\n排序后數(shù)組\n:";echo implode(', ',counting_sort($test_array, -1, 5)). PHP_EOL;
輸出:
12 原始數(shù)組 : 3, 0, 2, 5, -1, 4, 1 排序后數(shù)組 :-1, 0, 1, 2, 3, 4, 5
相關(guān)推薦:《PHP教程》
在線
客服
客服
熱線
7*24小時客服服務(wù)熱線
關(guān)注
微信
關(guān)注官方微信