常用排序演算法總結(2) 非比較排序演算法

2021-08-20 17:28:02 字數 2442 閱讀 1140

,主要有氣泡排序,選擇排序,插入排序,歸併排序,堆排序,快速排序等。

。在一定條件下,它們的時間複雜度可以達到o(n)。

需要三個陣列:

待排序陣列 int arr = new int;

輔助計數陣列 int help = new int[max - min + 1]; //該陣列大小為待排序陣列中的最大值減最小值+1

輸出陣列 int res = new int[arr.length];

1.求出待排序陣列的最大值max=4, 最小值min=1

2.例項化輔助計數陣列help,help陣列中每個下標對應arr中的乙個元素, help用來記錄每個元素出現的次數

3.計算 arr 中每個元素在help中的位置 position = arr[i] - min,此時 help = [1,0,2,2]; (4出現了兩次,2未出現)

4.根據 help 陣列求得排序後的陣列,此時 res = [1,3,3,4,4]

/**

* 分類 ------------ 內部非比較排序

* 資料結構 --------- 陣列

* 最差時間複雜度 ---- o(n + k)

* 最優時間複雜度 ---- o(n + k)

* 平均時間複雜度 ---- o(n + k)

* 所需輔助空間 ------ o(n + k)

* 穩定性 ----------- 穩定

*/public static int countsort(int arr)

int max = integer.min_value;

int min = integer.max_value;

//找出陣列中的最大最小值

for(int i = 0; i < arr.length; i++)

int help = new int[max];

//找出每個數字出現的次數

* 分類 ------------- 內部非比較排序

* 資料結構 ---------- 陣列

* 最差時間複雜度 ---- o(n * dn)

* 最優時間複雜度 ---- o(n * dn)

* 平均時間複雜度 ---- o(n * dn)

* 所需輔助空間 ------ o(n * dn)

* 穩定性 ----------- 穩定

*/public static void radixsort(int data, int radix, int d)

for (int j = 1; j < radix; j++)

// 按子關鍵字對指定的資料進行排序

* 分類 ------------- 內部非比較排序

* 資料結構 --------- 陣列

* 最差時間複雜度 ---- o(nlogn)或o(n^2),只有乙個桶,取決於桶內排序方式

* 最優時間複雜度 ---- o(n),每個元素佔乙個桶

* 平均時間複雜度 ---- o(n),保證各個桶內元素個數均勻即可

* 所需輔助空間 ------ o(n + bn)

* 穩定性 ----------- 穩定

*/public static void bucketsort(int arr)

//桶數

int bucketnum = (max - min) / arr.length + 1;

arraylist> bucketarr = new arraylist<>(bucketnum);

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

//將每個元素放入桶

for(int i = 0; i < arr.length; i++)

//對每個桶進行排序

for(int i = 0; i < bucketarr.size(); i++)

system.out.println(bucketarr.tostring());

}

refrence:

排序演算法總結2一非比較排序

目錄 一.計數排序 countingsort 二.基數排序 radixsort 二.桶排序 bucketsort 這篇文章中我們來 一下常用的非比較排序演算法 計數排序,基數排序,桶排序。在一定條件下,它們的時間複雜度可以達到o n 這裡我們用到的唯一資料結構就是陣列,當然我們也可以利用鍊錶來實現下...

非比較排序

以下內容參考自 演算法導論 基於比較的排序演算法可以用一顆完全二叉樹 決策樹 來表示,節點表示每一次的比較過程,葉子節點表示最終的排序順序,葉子節點一共有n 個 n表示資料個數,一共有n 種排列方式 二叉樹的高度h就是比較的次數,由二叉樹的性質,葉子節點的個數不大於2 h,所以有 2 h n 2 h...

非比較排序

計數排序 n個輸入元素的每乙個都是在0到k之間的整數 k為某個整數 1.假設輸入陣列是a 1.n 還需要兩個陣列 b 1.n 存放排序的輸出,c 0.k 提供臨時儲存空間 2.c i 中存放等於 i 的元素的個數,i 0,1,k 3.通過相加計算確定有多少元素是小於等於i的 4.把每個元素a i 放...