Hi! I am supposed to write a code which uses a Merge Sort algorithm that reads from a file and prints it out to an output file. This is what I implemented so far and it doesn't seem to work correctly. I can do it with separate arrays but I need to use one data array with a temp array and it needs to be recursive. Can anyone point me in the right direction or see something wrong that I missed?
Input file:
911.876
468.77
405.136
954.823
25.9998
OutPut I get:
25.9998
468.77 <
405.136 <
911.876
954.823
What output should be:
25.9998
405.136
468.77
911.876
954.823
Code:#include <iostream> #include <fstream> using namespace std; int mid = 0; int n = 0; int begin = 0; ifstream infile("input.txt"); ofstream mergeout("lmergeout.txt"); void merge(double data[], int first, int last,int num) { double temp[num]; for(int i=0;i<num;i++)temp[i] = data[i]; int middle = (first+last)/2; int i1=first; int i2=first; int i3=middle+1; cout<<first<<endl; cout<<middle<<endl<<last<<endl<<endl; for(int i = 0;i<num;i++) { cout<<data[i]<<endl; } cout<<endl; while(i2 <= middle && i3 <= last) { if(data[i2] < data[i3]) { temp[i1++] = data[i2++]; // temp[i2++] = data[i1++]; } else { temp[i1++] = data[i3++]; // temp[i3++] = data[i1++]; } } while(i3<=last) temp[i1++] = data[i3++]; while(i2<=middle) temp[i1++] = data[i2++]; for(int i = 0;i<num;i++) { data[i] = temp[i]; cout<<data[i]<<endl; } } void mergesort(double data[], int first, int last,int num) { if (first < last) { mid = (first+last) / 2; mergesort(data,first,mid,num); mergesort(data,1 + mid,last,num); merge(data,first,last,num); cout<<endl; } } int main() { n = 5; // Size of Array double array_merge[n]; //The Array of Size 'n' // Reads data and puts it in array for(int j = 0;j<n;j++) { infile>>array_merge[j]; } mergesort(array_merge, begin,n-1,n); for(int j=0;j<n;j++)mergeout<<array_merge[j]<<endl; //Prints file out



LinkBack URL
About LinkBacks


