十大經典排序演算法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 因此稱為非線性時間比較類排序。線性時間非比較類排序 不通過比較來決定元素間的相對次序,它可以突破基於比較排序的時間下界,以線性時間執行,因此稱為線性時間非比較類排序。時間複雜度 空間複雜度 穩...