桶排序
Posted happyknockoncode
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了桶排序相关的知识,希望对你有一定的参考价值。
桶排序
排序思想: 首先通过最大最小值数据范围 maxx-minn 按照每个桶平均装的数量 得出桶的数量。然后遍历数组 a[ ] ,装入桶中,进行桶内排序。
1#include<vector>
2#include<stdio.h>
3#include<time.h>
4#include<stdlib.h>
5#include<algorithm>
6using namespace std;
7void bucketSort(int a[],int n)
8{
9 int maxx=-9999,minn=9999;
10 for(int i=0; i<n; i++)
11 {
12 if(maxx<a[i])
13 maxx=a[i];
14 if(minn>a[i])
15 minn=a[i];
16 }
17 /**根据数据范围得出桶的数量(最多10个元素1个桶)*/
18 int bucketNum=maxx/10-minn/10+1;
19
20 vector<int>v[bucketNum];
21 for(int i=0; i<n; i++)
22 {
23 int t=(a[i]-minn)/10;
24 v[t].push_back(a[i]);
25 }
26
27 printf("Sort Over:
");
28 for(int i=0; i<bucketNum; i++)
29 {
30 /**
31 桶内排序,可以插入排序,也可以用排序函数
32 */
33 if(v[i].size())
34 {
35 sort(v[i].begin(),v[i].end());
36 for(int j=0; j<v[i].size(); j++)
37 printf("%d ",v[i][j]);
38 }
39 }
40}
41int main()
42{
43 int n=10;
44 int a[12];
45 for(int i=0; i<n; i++)
46 a[i]=rand()%7+1;
47 for(int i=0;i<n;i++)
48 printf("%d%c",a[i],i==n-1?‘
‘:‘ ‘);
49 bucketSort(a,n);
50 return 0;
51}
以上是关于桶排序的主要内容,如果未能解决你的问题,请参考以下文章