小範圍排序

2021-08-20 05:05:00 字數 833 閱讀 7502

給定乙個int陣列a,同時給定a的大小n和題意中的k,請返回排序後的陣列。

時間複雜度 o(n)的. 桶排序: 由於陣列大小和區別無法確定, 最好別用

時間複雜度 o(nlogn)的:  堆排序:  已經每個元素最多移動k個距離, 那麼最下的那個數移動到陣列第乙個位置距離最多為k, 可以建立長度為k的小根堆, 並且彈出堆頂, 接著小根堆向後移動一位, 再次進行排序, 彈出堆頂, 再次後移.... 這樣就可以了. 只需改進一下堆排序

public static void 

main

(string

args) ;

sortelement

(a, 5)

;}public static void

sortelement

(int a

, int k)

} else }}

for

(i = 0;

i <

len; i++

) }/*** @param

a

陣列* @param

i

非葉子節點下標

* @param

m

偏移量* @param

len

長度*/

public static void

adjustheapsmall

(int a

, int

i, int

m, int

len) a[

i] = temp

;}

執行結果: 

小範圍排序

已知乙個幾乎有序的陣列,幾乎有序是指,如果把陣列排好順序的話,每個元素移動的距離可以不超過k,並且k相對於陣列來說比較小。請選擇乙個合適的排序演算法針對這個資料進行排序。給定乙個int陣列a,同時給定a的大小n和題意中的k,請返回排序後的陣列。測試樣例 2,1,4,3,6,5,8,7,10,9 10...

小範圍排序(C )

關於演算法與資料結構的相關博文 二叉樹相關練習題 c 經典排序演算法的c 實現 與字串有關的一些典型問題的c 解法 一些可以用動態規劃 dp 演算法解決的問題 c 排列組合相關筆試面試題 c 與概率相關的演算法題c 解法 附證明過程 二分查詢的巧妙運用 c 位運算在演算法題中的使用 c 鍊錶相關練習...

小範圍排序 使用堆排序

已知乙個幾乎有序的陣列,幾乎有序是指,如果把陣列排好順序的話,每個元素移動的距離可以不超過k,並且k相對於陣列來說比較小。請選擇乙個合適的排序演算法針對這個資料進行排序。給定乙個int陣列a,同時給定a的大小n和題意中的k,請返回排序後的陣列。測試樣例 2,1,4,3,6,5,8,7,10,9 10...