排序算法-计数排序
計數排序(Counting sort)是一種穩定的排序算法。
計數排序使用一個額外的數組C,其 中第i個元素是待排序數組A中值等于i的元素的個數。然后根據數組C來將A中的元素排到 正確的位置。它只能對整數進行排序。
?
?
import randomdef counting_sort(data_list):length = len(data_list)# 定義桶bucket = []max = data_list[0]for d in data_list:if d > max:max = d# 初始化for i in range(max + 1):bucket.append(0)# 計數for i in range(length):bucket[data_list[i]] = bucket[data_list[i]] + 1# 累加for i in range(1, max+1):bucket[i] = bucket[i] + bucket[i-1]# 計數排序,定義結果數組并初始化result = [0 for _ in range(length)]print("result:", result)print("data_list:", data_list)print("bucket:", bucket)# 從尾到頭查找分數在result的插入位置,如果從頭到尾的話就不是穩定的排序算法for i in range(length - 1, -1, -1):result[bucket[data_list[i]] - 1] = data_list[i]bucket[data_list[i]] = bucket[data_list[i]] - 1# 將結果復制到原來的數組中,達到修改數組的效果for i in range(length):data_list[i] = result[i]data_list = [random.randint(0, 100) for i in range(10)] print("原始data_list:", data_list) counting_sort(data_list) print("排序后的data_list:", data_list)計數排序適用場景
計數排序只能用在數據范圍不大的場景中,如果數據范圍 k 比要排序的數據 n 大很多,就不適合用計數排序了。而且,計數排序只能給非負整數排序,如果 要排序的數據是其他類型的,要將其在不改變相對大小的情況下,轉化為非負整數。
?
總結