對資料結構和演算法的總結和思考(六)--計數排序
計數排序是我所知排序裡面速度最快得排序方式(元素分佈均勻),也是所學裡面第一種不需要比較的排序方式。那麼現在問題來了,既然這個排序方式這麼棒,但是為什麼有很多小夥伴都沒有聽說過~這就不得不提這個排序演算法的缺陷了,它只支援整數排序,是不是很尷尬,是不是很難受~,下面我就來分享下這個排序演算法。
核心思想:
計數排序的基本思想是對於給定的輸入序列中的每一個元素x,確定該序列中值小於x的元素的個數(此處並非比較各元素的大小,而是透過對元素值的計數和計數值的累加來確定)。一旦有了這個資訊,就可以將x直接存放到最終的輸出序列的正確位置上。例如,如果輸入序列中只有17個元素的值小於x的值,則x可以直接存放在輸出序列的第18個位置上。當然,如果有多個元素具有相同的值時,我們不能將這些元素放在輸出序列的同一個位置上,因此,上述方案還要作適當的修改,即如果元素相同,則同一個位置值加一。
具體實現如下:
// 計數排序法
function countingSort(array) {
var len = array.length,
B = [],
C = [],
min = max = array[0];
console.time('計數排序耗時');
//找出最大和最小值,並把元素放到新陣列中它的值所對應的位置上,入a[1] = 5 , 則C[5] = 1.如果該位置已經存在元素,那該位置值+1
for (var i = 0; i = array[i] ? max : array[i];
C[array[i]] = C[array[i]] ? C[array[i]] + 1 : 1;
}
//這一步是關鍵,計算每個位置前面有多少小於或等於它的元素。例如本來C為[, 1, 0, 1, 2] 那麼在C[1]前面有多少個比C[1]小的值,1個,在C[2]
//前面有多少個比C[2]小的值,1 + 0 = 1個,在C[3]前有 1+0+1 = 2個,以此類推。
for (var j = min; j
計數排序主要就是把元素先放到一個新陣列中值對應的位置,就能知道自己前面有多少個比自己小的元素,然後一次遍歷放置就行。原理還是比較簡單,主要需要理解兩個地方,一個是計算自己前面有多少個元素,另一個就是把自己放在哪個位置。好了,排序演算法就分享完了,如有不懂,請留言,後續會講解查詢演算法和資料結構,thx~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2331/viewspace-2799334/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 對資料結構和演算法的總結和思考(三)--希爾排序資料結構演算法排序
- 資料結構和演算法總結--棧資料結構演算法
- 資料結構和演算法(六)佇列資料結構演算法佇列
- 複習資料結構:排序演算法(六)——堆排序資料結構排序演算法
- 對四種限流演算法的思考和總結演算法
- 資料結構和演算法面試題系列—數字題總結資料結構演算法面試題
- 【資料結構】棧和佇列的總結對比資料結構佇列
- 資料結構之計數排序資料結構排序
- 【資料結構與演算法】非比較排序(計數排序、桶排序、基數排序)資料結構演算法排序
- 資料結構與演算法整理總結---排序 2資料結構演算法排序
- [資料結構拾遺]字串排序演算法總結資料結構字串排序演算法
- 【資料結構與演算法】內部排序之五:計數排序、基數排序和桶排序(含完整原始碼)資料結構演算法排序原始碼
- js資料結構和演算法(9)-排序演算法JS資料結構演算法排序
- 資料結構基礎和演算法題系列總結資料結構演算法
- 【演算法與資料結構】經典排序演算法總結演算法資料結構排序
- 淺談演算法和資料結構(4):快速排序演算法資料結構排序
- Java資料結構和演算法(六)—演算法—反轉連結串列Java資料結構演算法
- 資料結構與演算法——排序演算法-基數排序資料結構演算法排序
- 資料結構和演算法(Golang實現)(25)排序演算法-快速排序資料結構演算法Golang排序
- 資料結構和演算法面試題系列—排序演算法之快速排序資料結構演算法面試題排序
- C語言_資料結構和演算法之_排序和查詢C語言資料結構演算法排序
- 資料結構和演算法資料結構演算法
- 演算法和資料結構演算法資料結構
- 資料結構和演算法:03.冒泡、選擇排序資料結構演算法排序
- 淺談演算法和資料結構(3):合併排序演算法資料結構排序
- 對資料結構和演算法的關係的理解資料結構演算法
- 淺談演算法和資料結構(2):基本排序演算法演算法資料結構排序
- 資料結構和演算法面試題系列—排序演算法之基礎排序資料結構演算法面試題排序
- 資料結構和演算法面試題系列—遞迴演算法總結資料結構演算法面試題遞迴
- 資料結構和演算法面試題系列—隨機演算法總結資料結構演算法面試題隨機
- 【Java資料結構與演算法】第八章 快速排序、歸併排序和基數排序Java資料結構演算法排序
- JavaScript 的資料結構和演算法JavaScript資料結構演算法
- Java的資料結構和演算法Java資料結構演算法
- (戀上資料結構筆記):計數排序、基數排序 、桶排序資料結構筆記排序
- 【資料結構基礎應用】【查詢和排序演算法】資料結構排序演算法
- 【資料結構與演算法】內部排序總結(附各種排序演算法原始碼)資料結構演算法排序原始碼
- 資料結構和演算法-堆資料結構演算法
- JavaScript資料結構和演算法JavaScript資料結構演算法