桶排序
桶排序主要是开辟一个很大的数组, 将其都赋值为0; 其作用为 :
如 : 输入数据 1 , 2 ,4 ,3 , 7, 1;
大数组 a[1] = 2, a[2] = 1, a[3] = 1, a[4] = 1, a[7] = 1;其余全部为0;a[i] = i出现的次数;然后浏览数组, 将不为0 的a[i] 的i 输出, 即实现排序;
假设待排序的数组a中共有N个整数,并且已知数组a中数据的范围[0, MAX)。在桶排序时,创建容量为MAX的桶数组r,并将桶数组元素都初始化为0;将容量为MAX的桶数组中的每一个单元都看作一个”桶”。
在排序时,逐个遍历数组a,将数组a的值,作为”桶数组r”的下标。当a中数据被读取时,就将桶的值加1。例如,读取到数组a[3]=5,则将r[5]的值+1。
主要代码:
const int Max = 100000;
//a[] 保存输入的数据
int *a = new int[N];
//b[] 开辟的大数组,并全部初始为 0;
int *p = new int[Max];
memset(p, 0, Max);
//将a[i]的值使p[i] ++;
for (i = 0; i < n; i++)
p[a[i]]++;
源代码
#include <stdlib.h>
#include <stdio.h>
const int N = 100;
void Fun1(int a[], int Frist, int Last);
const int Max = 100000;
int main()
{
int n;
scanf("%d", &n);
int *a = new int[N];
int i, j; i = 0, j = 0;
while (i < n)
scanf("%d", &a[i++]);
int *p = new int[Max];
memset(p, 0, Max);
for (i = 0; i < n; i++)
p[a[i]]++;
for (i = 0, j = 0; i < Max; i++)
{
while ((p[i]--) > 0)
a[j++] = i;
}
for (i = 0; i < n; i++)
printf("%d ", a[i]);
system("pause");
return 0;
}