排序演算法之計數排序

2021-10-13 03:06:18 字數 1449 閱讀 3839

1.演算法思想

2.流程分析

直接上例子:int array =

迴圈遍歷array,bucket中對應進行計數統計元素的個數

最後需要對原陣列重新排序,即迴圈遍歷array,對每個元素賦值

3.動態排序圖

4.**實現

public

static

void

countingsort

(int

array)

if(array[i]

> max)

}//偏差(這個變數至關重要)

int bias =

0- min;

//定義乙個新的陣列

int[

] bucket =

newint

[max - min +1]

;//將陣列所有元素用0填充

arrays.

fill

(bucket,0)

;for

(int i =

0; i < array.length; i++

)int index =0;

int i =0;

while

(index < array.length)

else}}

public

static

void

main

(string[

] args)

; system.out.

println

("排序前array:"

+ arrays.

tostring

(array));

countingsort

(array)

; system.out.

println

("排序後array:"

+ arrays.

tostring

(array));

/* * 排序前array:[12, 9, 3, 7, 5, 8, 5]

* 排序後array:[3, 5, 5, 7, 8, 9, 12]*/}

5.總結計數排序引入的偏差的概念很重要,bucket陣列存放的是array元素的個數,統計元素個數、array遍歷賦值這兩個步驟只要理解了,計數排序也就很好理解了,通過實際的例子以及**除錯能更快的去理解演算法思想。

理解≠學會,一定要打斷點,debug逐步除錯,手動敲一遍**!!!

排序演算法之計數排序

今在學習中,遇到計數排序演算法,雖然其對待排序的序列要求嚴格,但對於符合條件的序列來說,其時間複雜度很小。故列於此,僅為學習記憶。參考資料 對於僅由大寫字母 或小寫字母 構成的無序序列,可採用下面演算法進行排序。該演算法不在序列的每個元素間進行比較,而是使用了乙個額外的help整型字串來記錄每個元素...

演算法 排序之計數排序

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

排序演算法之計數排序

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