Merge sort....with Resursion
/*
I am a beginer of C....
It is a merge sort using Resursion....
It can't sort now.....
Anyone can tell me where is the problems in the program?
Thank you very much!!
*/
Code:
#include<stdio.h>
#include<stdlib.h>
#define FILENAME "input.dat"
#define MAXSIZE 200
int temp[110];
int readfile(int data[],int size);
void mergesort(int merge[],int base,int size);
void merges(int merge[],int p,int l_end,int q,int r_end);
main(){
int data[MAXSIZE];
int insert[MAXSIZE];
int merge[MAXSIZE];
int quick[MAXSIZE];
int size;
int i;
int base=0;
/*intilize the array data*/
for(i=0;i<=MAXSIZE-1;i++){
data[i]=0;
}
size=readfile(data,MAXSIZE);
for(i=0;i<=size-1;i++){
insert[i]=data[i];
merge[i]=data[i];
quick[i]=data[i];
}
base=0;
mergesort(merge,base,size);
printf("Orignal New order\n");
for(i=0;i<=size-1;i++){
printf("%d ",merge[i]);
printf(" %d \n",temp[i]);
}
/*for(i=0;i<=size-1;i++){
printf("%d \n",temp[i]);
}*/
}
/*merge sort*/
void mergesort(int merge[],int base,int size){
int mid;
if(base>=size) return;
mid=(base+size)/2;
mergesort(merge,base,mid);
mergesort(merge,mid+1,size);
merges(merge,base,mid,mid+1,size);
}
/*merge*/
void merges(int merge[],int p,int l_end,int q,int r_end){
int pos;
pos=0;
while((p<=l_end )&&(q<=r_end))
if (merge[p]<=merge[q])
temp[pos++]=merge[p++];
else
temp[pos++]=merge[q++];
while(p<=l_end)
temp[pos++]=merge[p++];
while(q<=r_end)
temp[pos++]=merge[q++];
}
/* Read file from input.dat */
int readfile(int data[],int size){
int i;
FILE *in_file;
if((in_file=fopen(FILENAME,"r"))==NULL)
{
printf("ERROR OF FILE OPEN!");
}else{
i=0;
while(fscanf(in_file,"%i",&data[i])!=EOF){
i=i+1;
}
fclose(in_file);
}
return i;
}
CODE TAGS added by Hammer