對n個整數用O n 的時間進行排序

2022-02-16 13:09:53 字數 551 閱讀 5091

1) 求得min, max

2) 開闢空間 a[0, max-min] = {-1}

3) if min < 0:

data[i] += |min|

else:

data[i] –= min

4) for i = 0 to n:

a[data[i]] = 1

5) index = 0

for i = 0 to max-min:

if a[i] = 1:

data[index] = i

index += 1

注:1)非比較型別的排序

2)用空間換時間

1) 如何將整數擴充套件為其他型別

(1) 用一一對應的方法

(2) 規範化

2) 如何減少空間的使用?

(1) 截斷法(例如:除去 10%的最大,最小值)

(2) 考慮其分布(例如:如果是均勻分布可用桶排序)

(3) 考慮其稀疏性(例如:定義稀疏度 = n/(max - min))

(4) 通過構造區間,將區間與單個的值做對應

堆排序示例 對n個整數進行排序

堆排序是一種比較高效的演算法.雖然在大規模排序時不及快排,但是這個演算法較容易實現,不易錯 因為沒有用到遞迴 一般規模的排序還是效果不錯的.以下是示例 includeusing namespace std void heapsort int num,int n func decl.int main ...

用指向指標的指標的方法對n個整數進行排序。

歡迎加qq群 453398542 學習討論,會定期分享資料課程,解答問題。用指向指標的指標的方法對n個整數進行排序。include include define n 20 交換 void swap int a,int b int temp a a b b temp 排序 void sort int ...

指向指標的方法對n個整數排序

include stdio.h 通過指向指標的指標來排序 即根據指標所指的元素的大小來將指標位址排序 而後依次輸出指標位址的時候得到的就是有序的陣列 比如3,1的指標位址分別為a和b,即a 3,b 1 交換指標位置後a 1,b 3 對本程式中的ptr指標陣列進行了排序 void sort int p...