2 7 演算法 11 計數排序

2021-10-05 02:58:59 字數 863 閱讀 4939

演算法子目錄:

計數排序的基本思想在於給定的輸入序列中的每乙個元素x,確定該序列中值小於等於x元素的個數,然後將x直接存放到最終的排序序列的正確位置上。

有點類似mapreduce的map過程。

import random

from a.cat_time import cal_time

@cal_time

def count_sort(li,max_num=100):

#建立乙個 100 長度的列表,每個元素都是 0

count = [0 for _ in range(max_num+1)]

#遍歷我們的列表,在 li 元素對應的索引上 +1 我們的元素是3 就在count的索引3上 +1

for val in li:

count[val] += 1

#清空li 這樣可以降低乙個列表的空間

li.clear()

for i,v in enumerate(count):

#enumerate會返回兩個值,乙個是索引,乙個是索引上的元素。

#這裡的索引就是指我們需要計數的元素 i 索引上的元素就是我們的計數

for _ in range(v):

#這裡就是計數的彙總

li = [random.randint(0,100) for _ in range(100000)]

count_sort (li)

計數排序是是犧牲空間複雜度來使時間複雜度達到線性增長。

時間複雜度為o(n)

空間複雜度為o(n)

對於小規模排序計數排序的時間複雜度和空間複雜度都是效率較高的,但是計數排序對輸入有限制,並不是所有情況下都能使用這種排序演算法。

排序11 計數排序

這裡再介紹一種排序演算法,該方法也是不需要進行元素間的比較,卻能實現排序過程的。不過,與基數排序一樣,它所處理的序列也有些限制 序列元素必須為非負整數,且大小有上限。仍以序列 49 38 65 97 76 13 27 49為例。計數排序的思想在於 首先,求取該序列中最大的元素,顯然為97。然後,建立...

演算法 排序 計數排序

計數排序不是基於比較的排序演算法,其核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數。計數排序 counting sort 是一種穩定的排序演算法。計數排序使用乙個額外的陣列c,其中第i個元素是待排序陣列a中值等於i...

演算法 排序 計數排序

計數排序的核心思想就是將需要排序的陣列的元素轉為下標,在輔助空間陣列 輔助空間陣列的初始都是0 中找到對應元素的下標位置,將該位置的元素 掃瞄下標,將對應不為0的下標記錄賦值給原陣列,然後對應下標元素 圖例分析 具體 includevoid countsort int a,int len int m...