#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int* inputData(char *fileName,int *num,int length){
  FILE *fo;
  int i;
  char str[256];

  if((fo=fopen(fileName,"r"))==NULL){//リードモードでファイルを開く
    printf("Can't Open Input File.\n");
    exit(1);
  }

  i=0;
  while(fgets(str,256,fo)!=NULL){//ファイルからデータを読み込む
    num[i]=atoi(str);
    i++;
  }
  return num;
}

//バブルソート(再帰呼出)
void bubble_sort(int length,int *num,int count){
  int n,tmp;

  if(count!=length-1){
    for(n=length-1;n>count;n--){
      if(num[n]<num[n-1]){ //比較対象の数字が一つ前の数字より小さければ,入れ換える。
        tmp=num[n];
	num[n]=num[n-1];
	num[n-1]=tmp;
      }
    }
    count++;
    bubble_sort(length,num,count);
  }
}

void outputData(int *num,int length){
  int i;

  //結果を標準出力
  printf("\n*****Result*****\n");
  for(i=0;i<length;i++){
    printf("%d ",num[i]);
  }
  printf("\n");
}

int main(int argc,char *argv[]){
  int length;
  int *num;
  int i;

  if(argc!=3){
    printf("Please Enter Length and File Name\n");
    exit(1);
  }
  if(!isdigit(*argv[1])){
    printf("Length is Integer!!!\n");
    exit(1);
  }
  length=atoi(argv[1]);

  //int型配列を用意する
  num=(int*)malloc(sizeof(int)*length);
  num=inputData(argv[2],num,length);

  printf("*****Data*****\n");
  for(i=0;i<length;i++){
    printf("%d ",num[i]);
  }
  printf("\n");
  bubble_sort(length,num,0);
  outputData(num,length);

  free(num);

  return(0);
}
