/*2000年11月15日 バケットソートaaa
負の数があっても大丈夫なようにする。*/

#include <stdio.h>
#define MAX 1000

int input_data(int *,int *);
void sort_data(int *,int *,int);
void show_result(int *,int *,int);

int main(void){
        int x[MAX],num,sort[MAX];

        num = input_data(x,sort); /*データ入力関数*/
        sort_data(x,sort,num); /*ソート関数*/
        show_result(x,sort,num); /*結果表示関数*/    

        return 0;
}

int input_data(int *x,int *sort)
{
        /*入力する配列の数を指定*/
        int i,num;
        printf("今から入力する配列の個数を入れて下さい-->");
        scanf("%d",&num);

        /*数値の入力*/
        for(i=0;i<num;i++){
                printf("%d番目-->",i+1);
                scanf("%d",&x[i]);
        }

	/*結果用の配列に0を代入（要素の中身は個数にする）*/
	for(i=0;i<MAX;i++)
		sort[i]=0;

    return num;
}

void sort_data(int *x,int *sort,int num)
{
	int i,j,end=0;
	for(i=0;i<num;i++){
		j = x[i];
		sort[j+500] += 1;
	}
    return;
}

void show_result(int *x,int *sort,int num)
{
        int i,count=0,j;
        puts("並べ替えの結果");
        for(i=0;i<MAX;i++)
			if(sort[i] != 0){
               	printf("sort[%d]=%d\n",i,sort[i]);
				for(j=0;j<sort[i];j++){
					x[count] = i-500;
					count++;
				}
			}
		for(i=0;i<num;i++)
			printf("x[%d]=%d\n",i,x[i]);
        return;
}

