2017-04-30 101 views
2

給你十五個出生於二十世紀(1900年至1999年)的隨機人的出生年。您將得到的數據作爲下面的數組,這是你的桶排序功能使用的唯一論據:十年桶填充C程序

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] - >decade[9][9]這將代表90年代。
•初始化您的數組,使其僅包含-1。
•現在通過數組birthYears並將每個元素放入相應的存儲桶中,並將其放入適當的索引(WATCH THE INDICES)中的十進制數組中。
•最後,通過幾十年的拖網,逐個去除一個元素,並放回到數組birthyears。他們應該已經按照正確的順序。

這是我到目前爲止有:

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

那麼你想排序數組? –

+0

基本上。我必須使用桶排序來對其進行排序。但是,我不理解這個問題。 – Electiwirez

+0

你的老師是否說過使用'qsort'? –

回答

1

如果我理解你的作業權,那麼我會分發birthYear - 值在10x10 - 陣列,然後將它們寫回(現在訂購)爲birthYear - 陣列。請注意,桶排序實際上需要對每個十年進行排序,但是您的任務使其稍微簡單一些;關於數據,似乎每個出生日只出現一次。鑑於此,代碼可能如下所示:

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