歸併排序

//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++];
 }
}

自己寫的歸併排序程序,請大家多多指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章