桶排序(Bucket Sort)

适用级别:提高组
难度系数:5

算法思想:
使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中,同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。

1.什么时候最快
当输入的数据可以均匀的分配到每一个桶中。
2.什么时候最慢
当输入的数据被分配到了同一个桶中。

代码实现:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**************************************************************** 
 * Description: C++ implementation of bucket sort
 * Author: Alex Li
 * Date: 2023-06-09 19:33:41
 * LastEditTime: 2023-07-14 22:57:18
****************************************************************/

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

// 用n个桶对数组元素排序
void bucketSort(int arr[], int n){
	//创建n个空桶
	vector<int> b[n];
	//把不同的元素放到相应的桶里,这里以10为间距分桶
	int index;
	for (int i = 0; i < n; i++) {
		index= arr[i]/10; // Index in bucket
		b[index].push_back(arr[i]);
	}
	// 把每个桶里的元素进行排序
	for (int i = 0; i < n; i++)
		sort(b[i].begin(), b[i].end());
	// 把每个桶的数据放里到原数组里面
	index=0;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < b[i].size(); j++)
			arr[index++] = b[i][j];
}

/* Driver program to test above function */
int main(){
	int arr[]= {8,13,25,31,35,29,48,3,9,21,43,49};
	int n = sizeof(arr) / sizeof(arr[0]);
	bucketSort(arr, n);
	cout << "Sorted array is \n";
	for (int i = 0; i < n; i++)cout << arr[i] << " ";
return 0;
}
Scroll to Top