Commit 583e283f authored by POORVI HEBBAR's avatar POORVI HEBBAR

update merge-sort to reflect API update

parent 40aaf02b
...@@ -3,49 +3,70 @@ ...@@ -3,49 +3,70 @@
#include "sorting.h" #include "sorting.h"
using namespace std; using namespace std;
vector<int> merge(vector<int> arr1, vector<int> arr2){ vector<int> merge(vector<int> arr1, vector<int> arr2){
int n1=arr1.size(), n2=arr2.size(),count1=0,count2=0; int n1=arr1.size(), n2=arr2.size(),count1=0,count2=0;
vector<int> mergedArray(n1+n2); vector<int> mergedArray(n1+n2);
for(int i=0;i<n1+n2;i++){ for(int i=0;i<n1+n2;i++){
if(count1>=n1){ if(count1>=n1){
mergedArray[i]=arr2[count2]; mergedArray[i]=arr2[count2];
count2++; count2++;
} }
else if(count2>=n2){ else if(count2>=n2){
mergedArray[i]=arr1[count1]; mergedArray[i]=arr1[count1];
count1++; count1++;
} }
else{ else{
if(arr1[count1]<=arr2[count2]){ if(arr1[count1]<=arr2[count2]){
mergedArray[i]=arr1[count1]; mergedArray[i]=arr1[count1];
count1++; count1++;
} }
else{ else{
mergedArray[i]=arr2[count2]; mergedArray[i]=arr2[count2];
count2++; count2++;
} }
} }
} }
return mergedArray; return mergedArray;
} }
vector<int> sort_custom(vector<int> arr){ vector<int> mergeSort(vector<int> arr){
int n=arr.size(); int n=arr.size();
if(n==1){ if(n==1){
return arr; return arr;
} }
else else
{ {
int n1=n/2; int n1=n/2;
int n2=n-n1; int n2=n-n1;
vector<int> arr1(n1),arr2(n2); vector<int> arr1(n1),arr2(n2);
for(int i=0;i<n;i++){ for(int i=0;i<n;i++){
if(i<n1) if(i<n1)
arr1[i]=arr[i]; arr1[i]=arr[i];
else if(i<n1+n2) else if(i<n1+n2)
arr2[i - n1]=arr[i]; arr2[i - n1]=arr[i];
} }
vector<int> ans1=sort_custom(arr1); vector<int> ans1=mergeSort(arr1);
vector<int> ans2=sort_custom(arr2); vector<int> ans2=mergeSort(arr2);
vector<int> ans=merge(ans1,ans2); vector<int> ans=merge(ans1,ans2);
return ans; return ans;
} }
}
vector<int> sort_custom(vector<int> arr,int startidx,int endidx){
int n=arr.size();
vector<int> subArr(endidx-startidx+1);
for(int i=startidx;i<=endidx;i++)
subArr[i-startidx]=arr[i];
vector<int> ans(n);
subArr=mergeSort(subArr);
for(int i=0;i<n;i++)
{
if(i>=startidx && i<=endidx)
{
ans[i]=subArr[i - startidx];
}
else
{
ans[i]=arr[i];
}
}
return ans;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment