還是演算法 高階排序演算法 計數,基數和桶排序

2021-05-25 17:05:11 字數 1265 閱讀 3109

今天剛剛寫完資料結構學習內部排序篇的學習日誌,上網瀏覽一下網頁又發現了幾種自己完全沒聽過的排序演算法。好吧好吧,我承認自己的確是菜鳥。 = =

計數排序

想寫個計數排序,結果弄了一整天字元陣列,呵呵,基礎差沒辦法。

先介紹一下什麼是計數排序吧:這是乙個限制很大的演算法,雖然效率可以達到o(n),但是應用範圍不廣。它的基本思想就是不通過比較來排序,而是通過直接統計元素在序列中應排位置的方法。他的演算法是這樣的:

首先,假設需要排序的元素的範圍在0-k之內(多麼大的乙個限制啊)。然後建立乙個計數陣列,大小就是[0..k],陣列中的每一位分別對應待排序序列的相應的數字,比如說待排序列中有乙個32,那麼count[32]對應的就是32在待排序列中出現的總次數(32有可能出現多次)。

通過遍歷一次待排序列,統計得到乙個count陣列,然後對這個陣列作累加統計操作(有點類似於高數時候的積分),即for i=0 to k , 這樣就得到乙個遞增序列。而這個序列就是元素在

排序後排序中所應該存放的位置。最後只需要根據這個遞增序列,將待排序列中的元素輸出到結果序列中就完成了。

其中這種方法還是挺簡單的,看看源**好了:

code:

#include 

#include 

const

int list_length = 30;  

const

int char_length = 128;  

char *testcase[list_length] = ;  

//function definition

char** countsort(char **source);  

//function implementation

char** countsort(char **source);  

int i;  

//generate the count array

for (i=0;i

for (i=1;i

int pos;  

for (i=0;ipos = count[**(source+i)] -1 ;  

count[**(source+i)]--;  

*(result+pos) = *(source+i);  

}  return result;  

}  //test function

void testcountsort()  

}  //main function

void main()     

to be con..

JS 排序演算法之計數和基數排序

目錄 利用陣列的index是天然有序的特徵來排序.例如 已知乙個亂序陣列的範圍是0 10,長度未知,我們只需要遍歷一遍陣列,點出每個值出現的次數,並用乙個新陣列來儲存這個次數,就能做到排序.假如數字1出現3次,那麼新陣列newary 1 3,在新陣列遍歷的時候輸出3次 1 特點 先遍歷陣列計算數值出...

演算法導論5 基數排序和計數排序 2016 1 5

今天的這個比較神奇,是乙個線性複雜度的排序演算法o n 演算法導論在這一部分先證明了比較排序的複雜度下界是nlgn,所以基數排序不是基於比較的排序。其實這種比較方法我們應該都接觸過。假設輸入的數都是三位以下的數 當然其他位數也可以,模擬一下,這裡就假設是三位數 兩位數 一位數 那麼只需要大致3n的複...

演算法筆記 桶排序 計數排序 基數排序

三種時間複雜度是 o n 的排序演算法 桶排序 計數排序 基數排序。因為這些排序演算法的時間複雜度是線性的,所以我們把這類排序演算法叫作線性排序 linear sort 桶排序 bucket sort 將要排序的資料分到幾個有序的桶裡,每個桶裡的資料再單獨進行排序。桶內排完序之後,再把每個桶裡的資料...