你被赋予出生于二十世纪(1900年至1999年)的十五个随机人的出生年份。您将获得以下数组的数据,该数组是BucketSort函数中使用的唯一参数:
birthYears[] = {84, 51, 92, 72, 17, 62, 1, 16, 10, 28, 99, 71, 45, 18, 61};
您的函数将返回类型为void,并将按以下方式工作:
•创建一个代表几十年的10x 10阵列,称之为十年。因此,decade[0][1]
- > decade[0][9]
代表00,decade[1][0]
- > decade[1][9]
代表10个,依此类推decade[9][0]
- >代表90年代的decade[9][9]
•初始化数组,使其仅包含-1
•现在浏览数组birthYears
并将每个元素放入适当的存储桶中,并将其放入十进制数组中的相应索引(WATCH THE INDICES)中。
•最后,拖网几十年,一次删除一个元素,然后放回数组诞生年份。它们应该已经按正确的顺序排列。
这是我到目前为止所做的:
void Bucket_Sort(birthYears[]){
int i,j;
int decades[10][10];
for(i=0; i<15; i++)
}
//Actual Bucket Sort Function
void Bucket_Sort(int array[], int n){
int i, j;
int count[n];
for (i = 0; i < n; i++)
count[i] = 0;
for (i = 0; i < n; i++)
(count[array[i]])++;
for (i = 0, j = 0; i < n; i++)
for(; count[i] > 0; (count[i])--)
array[j++] = i;
}
我不知道该怎么办。
答案 0 :(得分:1)
如果我理解你的作业正确,那么我会将birthYear
- 值分发到10x10
- 数组中,然后将它们写回(现在订购)到birthYear
- 数组中。请注意,Bucket Sort实际上需要对每个十年进行排序,但是您的任务使得它更简单一些;关于数据,似乎每个出生日只发生一次。鉴于此,代码可能如下所示:
void Bucket_Sort(int array[], int n) {
// init decades array
int decades[10][10];
for(int dec=0;dec<10;dec++) {
for(int year=0;year<10;year++) {
decades[dec][year]=-1;
}
}
// distribute array values to decades array
for(int i=0; i<n; i++) {
int val = array[i];
int dec = val/10;
int year = val%10;
decades[dec][year]=val;
}
// write back
int target = 0;
for(int i=0; i<100; i++) {
int dec = i/10;
int year = i%10;
int val = decades[dec][year];
if (val>=0) {
array[target++] = val;
}
}
}