排序演算法之計數排序

2021-05-25 11:36:00 字數 633 閱讀 4449

今在學習中,遇到計數排序演算法,雖然其對待排序的序列要求嚴格,但對於符合條件的序列來說,其時間複雜度很小。故列於此,僅為學習記憶。

參考資料:

對於僅由大寫字母(或小寫字母)構成的無序序列,可採用下面演算法進行排序。該演算法不在序列的每個元素間進行比較,而是使用了乙個額外的help整型字串來記錄每個元素出現的頻度,然後通過乙個巧妙的遞加,計算出每個元素在排序好序列中的位置。

void countersort(const char *str, char *help_str)

//輔助計數陣列

int help[26] = ;

int i, j, k, index, pos;

//help[index]存放了元素'a' + index的個數

for(i = 0; i < strlen(str); i++)

//求出每個元素對應的位置

for(j = 1; j < 26; j++)

help[j] += help[j - 1];

//把每個元素放到對應的位置

for(k = strlen(str) - 1; k > 0; k--)

從上面的**可以看書,該排序過程的時間複雜度為o(m),其中m為字串str的長度(help_str與str同長)。

演算法 排序之計數排序

最近想到演算法導論中的計數排序,看看理解的怎麼樣試著講講自己的理解。1 思想 計數排序 是 線性時間的 排序演算法,時間複雜度為o n 雖然有一定的侷限性。但是還是很好的一種演算法。用2個陣列進行額外的儲存資訊,陣列 c 是對 資料中值相同的 記錄下來,以便後面查閱 b 是輸出的有序陣列,再將有序的...

排序演算法之計數排序

計數排序的思想特別簡單,就是記錄下序列中每個元素出現的次數,然後根據儲存次數的下標及出現次數將元素放回原陣列。時間複雜度為o n 資料範圍 空間複雜度為o 最大數 最小數 實現 pragma once int findmax int array,const int size return max i...

排序演算法之計數排序

計數排序是將輸入的資料值轉為鍵儲存在額外開闢的陣列空間中。做為線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數。思路 1 找出待排序的陣列中最大和最小的元素 2 統計陣列中每個值為i的元素出現的次數,存入陣列c的第i項 3 對所有的計數累加 從c中的第乙個元素開始,每一項和前一項相...