計數排序的實現 適用於元素均較小的seq

2022-08-20 03:33:15 字數 850 閱讀 8329

今天無聊就打算把所有的排序演算法都看一遍。。。

計數排序的時間複雜度是o(n),在演算法導論中,用決策樹模型中論證了,比較排序的情況為nlogn的複雜度。而計數排序的時間複雜度小於他的原因就是它不需要進行比較。

計數排序的原理就是根據原陣列(a)裡面最大的元素來乙個與其一樣大的陣列(b),新開的陣列(b)的第 i 個元素的值就是 i 在原陣列(a)裡面出現的次數.這樣就可以根據新開的陣列(b)來確定原陣列(a)的排序。

我們先來看看排序部分的實現:(len是陣列的長度)

void countsort(int *arrayl, int len) 

i--; //for 迴圈裡面還會自增

break;}}

}}

這部分的**應該不難理解,因為基本都已經在**注釋說明了。這裡原理就是,新開的陣列的下標就是原陣列的元素值。這樣的話,當新開的陣列某下標對應的值不為 0 時,代表該下標值在原陣列出現過,而我們知道下標是有序的,那麼就可以在遍歷新建陣列的時候有序地將有在原陣列出現過的值賦給原陣列。這樣原陣列就變得有序了。

但根據這個演算法的實現我們可以看出,它並不適合當陣列的元素值很大的時候。因為這樣的話新開的陣列空間很大,當輸入的元素是 n 個 0 到 k 之間的整數時,它的執行時間是 θ(n+ 

k),那麼當k很大時,新開陣列太大,既浪費空間,時間上也會有很大開銷,因為雖然看上去是θ(n + k),但當k很大時時間還是很長的。所以當需要排序的陣列的元素值均在0~100之間時會比較適合。特別是當有很多元素重複的時候。另外,對於浮點數,字串的排序他也無能為力。

其實,還有乙個地方用這個演算法的話會比較好,那就是在基數排序中比較每個位數的時候,因為每位數都是在0~9之間,用這個演算法就很perfect了。。。

適用於python的 vimrc檔案

根據我的需求做了一些小的改動。file vimrc date 2009 09 22 author gashero note 配置乙份簡單的vim配置檔案 set nocompatible 非相容模式 syntax on 開啟語法高亮 set background dark 背景色 color des...

適用於終端互動的外掛程式JQuery Terminal

適用 並引入進去,這裡的外掛程式是基於jquery的,所以也要引入jquery.js,這裡我就不展示出來了。以上檔案都可以從官網能拿到。1,引入成功之後,要在頁面寫入乙個節點 2,我這裡用的是websocket做的互動 scope.getteminal function socket.onmessa...

VUE 路由適用於道的問題

vue如今可謂是一匹黑馬,github star數已居第一位!前端開發對於vue的使用已經越來越多,它的優點就不做介紹了,本篇是我對vue使用過程中以及對一些社群朋友提問我的問題中做的一些總結,幫助大家踩坑!出現這種情況是因為依賴路由的params引數獲取寫在created生命週期裡面,因為相同路由...