数十年的Bucket Cill C计划

时间:2017-04-30 21:26:10

标签: c

你被赋予出生于二十世纪(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;
}

我不知道该怎么办。

1 个答案:

答案 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;
        }
    }
}