Skip to content

Instantly share code, notes, and snippets.

@ming2540
Created September 18, 2018 12:01
Show Gist options
  • Save ming2540/67c7aa9a8310a8c3f52000201d66979f to your computer and use it in GitHub Desktop.
Save ming2540/67c7aa9a8310a8c3f52000201d66979f to your computer and use it in GitHub Desktop.
#include<stdio.h>
void merge(int arr[], int left, int mid, int right){
int len1 = mid - left +1;
int len2 = right - mid;
int i;
int index1 = 0 , index2 = 0;
// create temp array
int left_array[len1];
int right_array[len2];
//take array to temp array
for(i=0;i<len1;i++){
left_array[i] = arr[left+i];
}
for(i=0;i<len2;i++){
right_array[i] = arr[mid+1+i];
}
i=left;
while(index1 < len1 && index2 < len2 ){
if(left_array[index1] < right_array[index2]){
arr[i] = left_array[index1];
index1++;
}
else {
arr[i] = right_array[index2];
index2++;
}
i++;
}
// check for other one
while(index1 < len1){
arr[i] = left_array[index1];
i++;
index1++;
}
while(index2 < len2){
arr[i] = right_array[index2];
i++;
index2++;
}
}
void merge_sort(int arr[], int left, int right){
int mid;
int i;
if(left < right){
mid = (left + right) /2;
merge_sort(arr, left, mid);
merge_sort(arr, mid+1, right);
merge(arr, left, mid, right);
}
}
int main(){
int arr[]={8,6,4,3,2,1};
int i;
printf("before sort : ");
for(i=0;i<6;i++){
printf("%d ",arr[i]);
}
printf("\n");
merge_sort(arr, 0, 6-1);
printf("after sort : ");
for(i=0;i<6;i++){
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment