//main.cpp
#include <iostream>
#include "merge_sort.h"
using namespace std;
int main(int argc, char ** argv)
{
int A[10] = {3,2,5,4,3,2,1,90,2,43};
MergeSort( A, 0, 9 );
for( int i = 0; i <= 9; i++ ){
cout << A[i] << " : ";
}
return 0;
}
//merge_sort.h
#ifndef _MERGE_SORT_H_
#define _MERGE_SORT_H_
void MergeSort( int a[], int left, int right );
void Merge( int a[], int b[], int left, int i, int right );
void Copy( int a[], int b[], int left, int right );
#endif
//merge_sorc.cpp
#include <iostream>
#include "merge_sort.h"
using namespace std;
void MergeSort( int a[], int left, int right )
{
int i;
int *b = (int *)malloc(sizeof(int) * (right - left + 1));
if( left < right ){
i = ( left + right )/2;
MergeSort(a, left, i);
MergeSort(a, i + 1, right);
Merge(a, b, left, i, right); //Merge to array b
Copy(a, b, left, right); //Copy to array a
}
free(b);
}
void Merge( int a[], int b[], int left, int i, int right )
{
int flag1 = left, flag2 = i + 1, t = 0;
for( int ii = 0; ii < (right - left + 1); ii++ ){
if( flag1 > i ){
b[ii] = a[flag2 + t];
t++;
}
else if( flag2 > right ){
b[ii] = a[flag1 + t];
t++;
}
else{
if( a[flag1] > a[flag2] ){
b[ii] = a[flag2];
flag2++;
}
else{
b[ii] = a[flag1];
flag1++;
}
}
}
}
void Copy( int a[], int b[], int left, int right )
{
int t = 0;
for( int i = left; i <= right; i++ ){
a[i] = b[t++];
}
}
自己寫的歸併排序程序,請大家多多指正。