Following code fragment is another
merge sort example written in c++ language.
Merge sort algorithm is very similar to quick sort algorithm. Both partition the input data into two parts and recursively apply sort algorithm on them.
#include <stdio.h>
#define LEN 9
void merge_sort(int num[],int start, int end);
void merge(int num[], int start, int mid, int end);
void tracer(int num[],int len);
int main(void){
int testArr[LEN] = {485,241,454,325,452,685,498,890,281};
merge_sort(testArr, 0, LEN-1);
}
void merge_sort(int num[],int start, int end){
int median = (start + end)/2;
if(start < end){
merge_sort(num, start, median);
merge_sort(num, median+1, end);
merge(num, start, median, end);
}
}
void merge(int num[], int start, int median, int end){
int i,j,k,m,n;
int tempArr[LEN];
i = start;
j = median+1;
k = start;
while (i <= median && j <= end){
tempArr[k++] = (num[i] > num [j]) ? num [j++] : num [i++];
}
m = (i > median) ? j : i;
n = (i > median) ? end : median;
for (; m<=n; m++){
tempArr[k++] = num[m];
}
for (m=start; m<=end; m++){
num[m] = tempArr[m];
}
printf("Merging: %d ~ %d & %d ~ %d\n",start,median,median+1,end);
tracer(num,LEN);
}
void tracer(int num[],int len){
int i;
for(i=0;i<len;i++){
printf("%d\t",num[i]);
}
printf("\n\n");
}