#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 selection_sort(int* num,int length){
  int i,n,tmp;
  int min,min_pos;

  for(i=0;i<length-1;i++){
    min=num[i]; //仮の最小値を最初の数にセット
    min_pos=i;  //仮の最小値の場所も覚える
    for(n=i+1;n<length;n++){
      if(num[n]<min){ //比較対象の数字が仮の最小値より小さければ、仮の最小値をそれにする
        min=num[n];
        min_pos=n;
      }
    }
    tmp=num[i]; //最小値と最初の数を入れ替え
    num[i]=min;
    num[min_pos]=tmp;
  }
}

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,i;
  int *num;

  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");

  selection_sort(num,length);
  outputData(num,length);

  free(num);
  return(0);
}
