桶排序
这里其实并不是将数字填入到数组中,只是在数组值上不断++。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include <limits>
#include <algorithm>
#include <time.h>
#define MAX 20
using namespace std;
void bucketSort(int arr[],int len) {
if (arr == NULL || len < 2) {
return;
}
int Max = INT_MIN;
for (int i = 0; i < len; i++) {
Max = max(Max, arr[i]);
//找出数组中的最大值
}
int* bucket = new int[Max + 1];//准备桶
for (int i = 0; i < Max + 1;++i)//开辟空间记得初始化
{
bucket[i] = 0;
}
//用下面初始化错误,memset只初始化了len大小的空间
// memset(bucket,0,Max+1);
// for (int i = 0; i < Max + 1;++i)
// {
// cout << bucket[i] << "";
// }
//只要出现过该数字n,在bucket[n]上就会+1
for (int i = 0; i < len; i++) {
bucket[arr[i]] = bucket[arr[i]] + 1;
//bucket[arr[i]]++;上下是一个作用,但是不能写成bucket[arr[i]] = + 1;
}
for (int i = 0; i < Max+1;++i)
{
cout << bucket[i] << " ";//查看每个桶中的数量
}
cout << endl;
int i = 0;
for (int j = 0; j <Max+1; j++) {
while (bucket[j]-- > 0) {
arr[i++] = j;
}
}
}
int main(void)
{
srand((unsigned int)time(NULL));
int arr[MAX];
for (int i = 0; i < MAX; ++i)
{
int num = rand() % 100;
arr[i] = num;
}
for (int i = 0; i < MAX; ++i)
{
cout << arr[i] << " ";
}
cout << endl;
bucketSort(arr, MAX);
for (int i = 0; i < MAX; ++i)
{
cout << arr[i] << " ";
}
system("pause");
return 0;
}