Public feed #722317

hsort

public text v1 · immutable
Raw Edit
·published 2007-10-01 22:31 UTC
rendered paste body
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <time.h>

#define maxint 2147483647;
#define minint -2137483647;

void merge(float* A,int p,int q,int r,int ord){

     int i,j,k;
     int n1=q-p+1;
     int n2=r-q;

     float L[n1];
     float R[n2];

/*      printf("q=%d,p=%d,r=%d,n1=%d,n2=%d\n",q,p,r,n1,n2); */

     for(i=0; i<n1; i++)
       L[i]=A[p+i];

     for(j=0; j<n2; j++)
       R[j]=A[q+j+1];
     
     if(ord==0){
       L[n1]=maxint;
       R[n2]=maxint;
     }
     else{
       L[n1]=minint;
       R[n2]=minint;
     }
     
     i=0;
     j=0;

/*      for(i=0;i<=4;i++){ */
/*        printf("L=%d,R=%d,i%d,j%d\n",L[i],R[j],i,j); */
/*        j++; */
/*      } */
     int l=0;
     for(k=p; k<=r; k++){
       //       printf("Before: A1=%f,L1=%f,R1=%f\ni%d,j%d,l%d\n",A[l],L[i],R[j],i,j,l);
       if(ord==0){
	 if(L[i]<=R[j]){
	   A[k]=L[i];
	   //	   printf("After: A1=%f,L1=%f,R1=%f\ni%d,j%d,l%d\n",A[l],L[i],R[j],i,j,l);
	   i++;
	 }
  	 else{
	   A[k]=R[j];
	   //   printf("After: A2=%f,L2=%f,R2=%f\ni%d,j%d,l%d\n",A[l],L[i],R[j],i,j,l);
	   j++;
	 }
       }
       else{
	 if(L[i]>=R[j]){
	   A[k]=L[i];
	   //  printf("After: A1=%f,L1=%f,R1=%f\ni%d,j%d,l%d\n",A[l],L[i],R[j],i,j,l);

	   i++;
	 }
	 else{
	   A[k]=R[j];
	   // printf("After: A2=%f,L2=%f,R2=%f\ni%d,j%d,l%d\n",A[l],L[i],R[j],i,j,l);

	   j++;
	 }
       }
       l++;
     }
     return;
}

void mergesort(float* A,int p,int r,int ord){

  int q;

  if(p<r){
    q=(p+r)/2;
    mergesort(A,p,q,ord);
    mergesort(A,q+1,r,ord);
    merge(A,p,q,r,ord);
  }
  return;
}

int main(int argc,char* argv[]){
  
  float A[atoi(argv[2])];
  float B[2*atoi(argv[2])];
  FILE *file;
  FILE *newfile;

  if(argc!=4)
    printf("error - invalid number of arguments: need 4 for proper execution\n");
  else{
    file=fopen(argv[1],"r");
    if(file==NULL)
      fprintf(stderr,"Could not open file %s :(\n","file");
    else{

      int i=0;
      int j=0;
      char line[10];
      while((fgets(line,sizeof(line),file)!=NULL) && (i<=2*atoi(argv[2]))){
	
	B[i]=atof(line);
	printf("B[%d]=%f\n\n",i,B[i]);
	i++;
      }
      for(i=0;i<=atoi(argv[2]);i++){
	A[i]=B[j];
	printf("A[%d]=%f\n",i,A[i]);	
	j+=2;
      }

      fclose(file);
    
      mergesort(A,0,atoi(argv[2]),atoi(argv[3]));

      newfile=fopen("msort.txt","w");
      int k;
      if(newfile==NULL)
	fprintf(stderr,"Could not create file %s :(\n","newfile");
      else{
	for(k=0; k<=atoi(argv[2]); k++){
	  fprintf(newfile, "%f\n", A[k]);
	  printf("a[%d]=%f\n",k,A[k]);
	}
      }
      fclose(newfile);
    }
  }
  return 0;
}




/* int main(void){ */
    
/*   float A[8]; */
/*   int j=9; */
/*   int i; */
/*   float b[8]; */
/*   b[0]=2; */
/*   b[1]=4; */
/*   b[2]=5; */
/*   b[3]=7; */
/*   b[4]=1; */
/*   b[5]=2; */
/*   b[6]=3; */
/*   b[7]=6; */

/*   A[0]=2; */
/*   A[1]=4; */
/*   A[2]=5; */
/*   A[3]=7; */
/*   A[4]=1; */
/*   A[5]=2; */
/*   A[6]=3; */
/*   A[7]=6; */



/*    while(j!=-1){ */
/*   A[i]=j; */
/*   i++; */
/*   j--; */
/*   } */

/*    for(i=0;i<8;i++) */
/*    printf("b=%d\n",b[i]); */
    

/*   mergesort(b,0,7,0); */
/*   mergesort(A,0,7,1); */
/*   for(i=0;i<=7;i++){ */
/*     printf("b[%d]=%f  A[%d]=%f\n",i,b[i],i,A[i]); */
/*   } */
/*   return 0; */
/* } */