演算法 桶排序思想 計數排序 基數排序 桶排序

2021-10-12 11:28:47 字數 2160 閱讀 5937

二. 基數排序

三. 桶排序

桶排序的思想

【*】量大但範圍最小:既能用陣列下標表示(整數) 且 有很多是並列的

其他情況不一定比快速排序快。

總結:

#include using namespace std;

const int m = 50;

const int scope = 60;

void main()

} delete arr; arr = null;

delete count; count = null;

}

#include using namespace std;

const int m = 20;

/* 當未知資料範圍時:

遍歷:找出最大值、最小值、計算資料範圍個數

scopenum = max - min + 1

對映到->

*/void main()

cout << "max: " << max << " min: " << min << endl;

// 計算資料範圍 所需 陣列大小

int scopenum = max - min + 1;

// 建立計數陣列

int* count = new int[scopenum];

// 初始化計數陣列

for (int i = 0; i < scopenum; i++) count[i] = 0;

// 計數陣列 - 統計的時候減去偏移 (min)

for (int i = 0; i < m; i++) count[arr[i] - min] ++;

// 輸出資料 - 輸出的時候加上偏移 (min)

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

} delete arr; arr = null;

delete count; count = null;

}

#include using namespace std;

const int m = 40;

const int scope = 20;

void main()

// 輸出排序後資料

for (int i = 0; i < m; i++) cout << result[i] << " ";

delete arr; arr = null;

delete result; result = null;

delete count; count = null;

}

穩定的排序

data : [123,43,4563]

有低位優先 and 高位優先:

字串的基數排序

#include using namespace std;/*	

*/void main()

cout << "max val: " << max;

while ((max /= 10) > 0) length++;

cout << " max length: " << length << endl;

/* 基數排序:每個位的排序都是乙個計數排序

*/ // 除數

int div = 1;

/// 迴圈排序各個位

while(length-- > 0)

// 3. 累加 計數陣列

cout << "統計陣列:";

for (int i = 1; i < 10; i++) cout << endl;

// 4. 【排序】這裡倒著排,要把大的數放在大的位置上

for (int i = num-1; i >=0; i--)

cout << "排序結果:";

for (int i = 0; i < num; i++) cout << endl;

// 5. 將結果拷貝到原陣列,後面還要用 result 陣列

for (int i = 0; i < num; i++) arr[i] = result[i];

// 6. 更新迭代

div *= 10;

}}

缺點:

桶排序 基數排序 計數基數排序 Java

前面已經講述了很多排序演算法,但是他們的排序演算法都是基於兩個值之間的比較,通過決策樹的方法可以證明深度為d的二叉樹則最多有 一些好的排序演算法是可以達到時間複雜度是線性的,桶排序就是其中一種。比如有n個數,但是這些數的最大數不超過m。這個時候就可以定義乙個含有m個元素的陣列 初始值為0 然後遍歷n...

桶排序 基數排序 計數排序

桶排序 1.原理 將需要排序的陣列分在有限的桶裡 然後對每個桶中的數分別排序 對每個桶的操作 1.別的排序演算法 2.以遞迴的方式繼續使用桶排序 2.過程 假設待排序的一組數統一的分布在乙個範圍中,並將這一範圍劃分成幾個子範圍,也就是桶 將待排序的一組數,分檔規入這些子桶,並將桶中的資料進行排序 將...

排序 基數排序(計數排序 桶排序)

在此對於桶排序做出兩種方法 一.簡化版桶排序 如下 簡化版的桶排序 include int main scanf d n 輸入乙個數n,表示接下來有n個數 for i 1 i n i 迴圈讀入n個數,並進行桶排序 for i 0 i 1000 i 依次判斷編號1000 0的桶 getchar get...