桶排序特点:
在桶的大小和元素个数呈现线性关系的时候,复杂度是线性的,最差是O(n^2)(个人理解是当所有元素都在一个桶的时候,采用插入排序的时候);
稳定排序(注意实现的时候:对同一个桶内元素的排序要使用稳定排序实现);
空间复杂度比较高;
桶排序的描述:
(1)初始化桶,将元素放入到合适的桶内
(2)对各个桶内的元素进行排序(插入排序)
(3)输出元素
具体流程就不介绍了,以下是个人的实现,主要分存在重复和不存在重复两种情况,我的代码只是测试,另外排序不是用的插入排序
1 #include <iostream>
2 #include <queue>
3 #include <climits>
4 #include <algorithm>
5 #include <memory.h>
6 #include <stdio.h>
7 #include <ostream>
8 #include <vector>
9 #include <list>
10
11 using namespace std;
12
13 vector<int> data;
14 int maxNum = 99;
15 void bucket_sort_unique()
16 {
17 int *bucket = new int[100];
18 memset(bucket,-1,sizeof(bucket));
19 vector<int>::iterator it;
20 for(it = data.begin() ; it!=data.end() ; ++it)
21 {
22 bucket[*it] = *it;
23 }
24 for(int i = 0 ; i<100 ; ++i)
25 {
26 if(bucket[i] > 0)
27 cout<<" "<<bucket[i];
28 }
29 }
30
31 void bucket_sort()
32 {
33 vector<list<int> > bucket(100);
34 vector<int>::iterator it;
35 it = data.begin();
36 while(it != data.end())
37 {
38 bucket[*it].push_back(*it);
39 ++it;
40 }
41 for(int i = 0 ; i<100 ; ++i)
42 {
43 if(bucket[i].size() != 0)
44 {
45 bucket[i].sort();
46 list<int>::iterator it1 = bucket[i].begin();
47 while(it1 != bucket[i].end())
48 {
49 cout<<" "<<*it1;
50 it1++;
51 }
52 }
53 }
54 }
55
56 int main()
57 {
58 int n;
59 cin>>n;
60 while(n--)
61 {
62 int tmp;
63 cin>>tmp;
64 data.push_back(tmp);
65 }
66 //bucket_sort_unique();
67 bucket_sort();
68 return 0;
69 }
时间: 2024-10-13 23:23:29