資料結構之排序

2021-10-22 20:46:39 字數 1010 閱讀 2762

額外的空間複雜度o(n+r)。其中n是原陣列中元素的個數,r是桶數(基數)

public

void

countingradixsort

(int

nums)

int n =0;

//最大樹的位數

while

(max_num!=0)

//2.根據最大數的位數,從個位到最高位進行基數排序

int e =1;

//用於獲取num的每一位

int[

] buf =

newint

[nums.length]

;//暫時存放數字的陣列

for(

int i =

0; i < n; i++

)//將count[k]轉換為在陣列中的索引

for(

int j =

1; j <

10; j++

)//根據count進行排序,暫時存在buf陣列中

//要從陣列的最後一位往前取

//這樣可以保證:當前位相同時,低位較大的數字在陣列的後面

for(

int j = nums.length-

1; j >=

0; j--

)//將buf中的數給nums

system.

arraycopy

(buf,

0,nums,

0,nums.length)

;//e*10

e *=10;

}}

時間複雜度:每個桶中一般使用較為快速的排序演算法,假設平均時間複雜度為o(nlogn):那麼整個桶排序的時間複雜度為o(n)+o(m * (n/m * log(n/m)))

化簡為o(n)+o(nlog(n/m)),即o(n*(log(n/m)+1))。可以看出,隨著 m(桶數)的增大,演算法的效率越高,當m=n時候,時間複雜度接近o(n)

額外的空間複雜度o(n+m)

資料結構之排序

在待排序的檔案中,若存在多個關鍵字相同的記錄,經過排序後這些具有相同關鍵字的記錄之間的相對次序保持不變,該排序方法是穩定的 若具有相同關鍵字的記錄之間的相對次序發生變化,則稱這種排序方法是不穩定的。穩定的排序 時間複雜度 空間複雜度 氣泡排序 最差和平均是o n2 最好是o n 1 雙向氣泡排序 最...

資料結構之排序

package com.small 注意a 0 是否有意思,書上c語言基本都是將a 0 作為哨兵,那麼0號元素不能用,我這裡全部是flag代替 author small leaf public class sort else for j i 1 j high 1 j a high 1 flag 希爾...

資料結構之排序

常用的幾種排序方法 冒泡 插入 選擇 快排 歸併排序 1 冒泡 以公升序為例,也是有兩種思路,1 num 0 依次與後面比較將最小的放到第一位 2 將最大的放到最後一位。我比較習慣用第一種 1 include include using namespace std int main for int ...