十大經典排序演算法 桶排序演算法詳解

2021-10-08 04:06:58 字數 1731 閱讀 9111

十大經典排序演算法1.概念

桶排序(bucket sort)是計數排序演算法的公升級版,將資料分到有限數量的桶子裡,然後每個桶再分別排序

2.演算法原理

這是乙個無序數列:11、38、8、34、27、19、26、13,我們要將它按從小到大排序

先建立5個桶,桶的區間跨度=(最大值-最小值)/桶的數量,注意,每個桶的範圍都是包含最小值,不包含最大值,最後乙個桶,既包含最小值,也包含最大值

遍歷原始序列,將序列放入桶中

每個桶內部的元素分別排序

遍歷所有桶,將桶中元素依次輸出:8、11、13、19、26、27、34、38

此時,元素已是有序的了

3.演算法實現

// 氣泡排序,桶內元素排序時使用到

function bubblesort(arr)

}sortborder = lastexchangeindex;

if (issorted)

}}// 桶排序

function sort(arr)

if (item < min)

}let d = max - min;

// 初始化桶

let bucketnum = 5;

let bucketarr = ;

for (let i = 0; i < bucketnum; i++)

// 遍歷原始陣列,將原始放入桶中

for (let item of arr)

bucketarr[index].push(item);

}// 對每個桶進行排序,這裡用了氣泡排序法

for (let itemarr of bucketarr)

// 遍歷桶,得到排序後結果

let index = 0;

let sortarr = ;

for (let itemarr of bucketarr)

}return sortarr;

}let arr = [11, 38, 8, 34, 27, 19, 26, 13];

let sortarr = sort(arr);

console.log(sortarr);

1.時間複雜度

桶排序演算法遍歷了2次原始陣列,運算量為2n,最後,遍歷桶輸出排序結果的運算量為n,初始化桶的運算量為m。

對桶進行排序,不同的排序演算法演算法複雜度不同,氣泡排序演算法複雜度為o(n^2),堆排序、歸併排序演算法複雜度為o(nlogn),我們以排序演算法複雜度為o(nlogn)進行計算,運算量為n/m*log(n/m)*m

最終的運算量為3n+m+n/m*log(n/m)*m,即3n+m+n(logn-logm),去掉係數,時間複雜度為o(n+m+n(logn-logm))

2.空間複雜度

桶排序演算法排序過程中新建了乙個桶和乙個輸出陣列,所以演算法的空間複雜度是o(n+m)

3.穩定性

桶排序演算法在對每個桶進行排序時,選擇穩定的排序演算法,則排序後,相同元素的位置不會發生改變,所以桶排序演算法是一種穩定的排序演算法

十大經典排序演算法

載自 排序演算法是 資料結構與演算法 中最基本的演算法之一。排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序演算法有 插入排序 希爾排序 選擇排序 氣泡排序 歸併排序 快速排...

十大經典排序演算法

不穩定排序種類為4種 快速排序 核心思想是partition操作 二分法分而治之 平均時間複雜度nlogn 希爾排序 高階版的插入排序,先把間隔較遠的子串行排序,最後間隔為1時,等同於插入排序 插入排序在序列有序時,時間複雜度常數級,所以先讓子串行總體有序,能有效降低時間複雜度 平均時間複雜度n 1...

十大經典排序演算法

常見經典排序 非線性時間比較類排序 通過比較來決定元素間的相對次序,由於其時間複雜度不能突破o nlogn 因此稱為非線性時間比較類排序。線性時間非比較類排序 不通過比較來決定元素間的相對次序,它可以突破基於比較排序的時間下界,以線性時間執行,因此稱為線性時間非比較類排序。時間複雜度 空間複雜度 穩...