2017-11-15 3 views
0

私はちょうど数値をソートするためにカウントソートを使用してCのprogrammのために働いています、ここで私のコードです。ライブラリarrayio.hは入力用のコードです。Cでのソートソートは、最初の4つの数字だけをソートすることができます

#include <stdio.h> 
#include <stdlib.h> 
#include "arrayio.h" 

int MAX_LAENGE = 1000; 
int MAX_VALUE = 100; 
int i,j,k; 

void count_sort_calculate_counts(int input_array[], int len, int count_array[]) { 
    for (i=0; i<len;i++) { 
     count_array[i] = 0; 
    } 
    for (j=0; j<len;j++) { 
     count_array[input_array[j]] = count_array[input_array[j]] + 1; 
    } 
} 

void count_sort_write_output_array(int output_array[], int len, int count_array[]) { 
    k=0; 
    for (j=0;j<len;j++) { 
     for (i=0; i<count_array[j]; i++) { 
      output_array[k] = j; 
      k = k + 1; 
     } 
    } 
} 

int main(int argc, char *argv[]) { 
    if (argc < 2){ 
     printf("Aufruf: %s <Dateiname>\n", argv[0]); 
     printf("Beispiel: %s zahlen.txt\n", argv[0]); 
     exit(1); 
    } 
    char *filename = argv[1]; 

    int input_array[MAX_LAENGE]; 
    int len = read_array_from_file(input_array, MAX_LAENGE, filename); 

    printf("Unsortiertes Array:"); 
    print_array(input_array, len); 

    int count_array[MAX_LAENGE]; 
    int output_array[MAX_LAENGE]; 
    count_sort_calculate_counts(input_array, len, count_array); 
    count_sort_write_output_array(output_array, len, count_array); 

    printf("Sortiertes Array:"); 
    print_array(output_array, len); 
    return 0; 
} 

私の問題は、このプログラムを実行すると、最初の4つの数字だけが返されることです。これは、戻り

90 38 42 34 8 0 77 1 84 5 25 72 44 42 90 63 23 

0 1 5 8 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0

また、count_arrayには「MAX_VALUE」アイテムのみが必要です –

答えて

1

エラーがバック出力配列にカウントを分配コードであるIは入力、例えば 、。あなたが最大値に達したとき、あなたがそれを終了する必要がある間は、元の配列の長さに達するとカウントの反復を終了します。

void count_sort_write_output_array(int output_array[], int len, int count_array[]){ 
    k=0; 
    for (j=0;j<MAX_LAENGE;j++) 
    { 
     for (i=0; i<count_array[j]; i++) 
     { 
      output_array[k++] = j; 
     } 
    } 
} 

Demo.

いくつかの「スタイルのためのポイントは、」隠れ考慮稼ぐためにカウントを計算し、値を出力配列に戻す単一のソート関数の内部にあるカウント配列。結局のところ、countsはコードのユーザにとって関心のない中間結果であるため、ソート関数をユーザに割り当ててはいけません。

関連する問題