給定乙個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...