/*
* MergeSortAlgorithm.h
*
* Created on: Jun 22, 2010
* Author: kevin
*/
#ifndef MERGESORTALGORITHM_H_
#define MERGESORTALGORITHM_H_
//void mergesort(int* arr, int len);
//void copy_arr(int* src, int begin1, int end1,
// int* dst, int begin2, int end2);
//
//void merge(int* src1, int begin1, int end1,
// int *src2, int begin2, int end2,
// int* dst);
#include "MergeSortAlgorithm.cpp"
#endif /* MERGESORTALGORITHM_H_ */
/*
* MergeSortAlgorithm.cpp
*
* Created on: Jun 22, 2010
* Author: kevin
*/
//#ifndef _MERGESORT_ALGORITHM_
//#define _MERGESORT_ALGORITHM_
//void mergesort(int* arr, int len);
//void copy_arr(int* src, int begin1, int end1,
// int* dst, int begin2, int end2);
//
//void merge(int* src1, int begin1, int end1,
// int *src2, int begin2, int end2,
// int* dst);
void copy_arr(int* src, int begin1, int end1,
int* dst, int begin2, int end2)
{
for(int i=begin1,j=begin2;
i <= end1 && j<= end2;
++i,++j)
{
dst[j] = src[i];
}
}
void merge(int* src1, int begin1, int end1,
int *src2, int begin2, int end2,
int* dst)
{
int len1 = (begin1-end1+1);
int len2 = (begin2-end2+1);
dst=new int [len1+len2];
int i,j,k;
i=j=k=0;
for(;i<len1+len2; ++i)
{
if(src1[j]<src2[k])
{
dst[i] = src1[j];
++j;
}
else
{
dst[i] = src2[k];
++k;
}
}
}
void mergesort(int* arr, int len)
{
if(len>1)
{
int * arr1;
int * arr2;
arr1=new int[len/2];
arr2=new int[len - len/2];
copy_arr(arr,0,len/2-1,
arr1,0,len/2-1);
copy_arr(arr,len/2,len-1,
arr2,0,len-len/2-1);
mergesort(arr1,len/2);
mergesort(arr2,len - len/2);
merge(arr1,0,len/2-1,
arr2,0,len-len/2-1,
arr);
}
}
//#endif
//============================================================================
// Name : MergeSort.cpp
// Author : kevin
// Version :
// Copyright : Kevinland
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include "MergeSortAlgorithm.h"
using namespace std;
int main() {
int test_arr[] = {3,8,4,5,6,2,4,9};
mergesort(test_arr,8);
for(int i=0;i<8;i++)
{
cout<<test_arr[i]<<" ";
}
cout << "" << endl; // prints !!!Hello World!!!
return 0;
}