归并排序

转 白话经典算法系列之五 归并排序的实现

#include <iostream>

using namespace std;



//将有二个有序数列a[first...mid]和a[mid...last]合并。  

void mergearray(int a[], int first, int mid, int last, int temp[])  

{  

	int i = first, j = mid + 1;  

	int m = mid,   n = last;  

	int k = 0;  



	while (i <= m && j <= n)  

	{  

		if (a[i] <= a[j])  

			temp[k++] = a[i++];  

		else  

			temp[k++] = a[j++];  

	}  



	while (i <= m)  

		temp[k++] = a[i++];  



	while (j <= n)  

		temp[k++] = a[j++];  



	for (i = 0; i < k; i++)  

		a[first + i] = temp[i];  

}  

void mergesort(int a[], int first, int last, int temp[])  

{  

	if (first < last)  

	{  

		int mid = (first + last) / 2;  

		mergesort(a, first, mid, temp);    //左边有序  

		mergesort(a, mid + 1, last, temp); //右边有序  

		mergearray(a, first, mid, last, temp); //再将二个有序数列合并  

	}  

}  



bool MergeSort(int a[], int n)  

{  

	int *p = new int[n];  

	if (p == NULL)  

		return false;  

	mergesort(a, 0, n - 1, p);  

	delete[] p;  

	return true;  

}  



void main()

{

	int a[] = {2, 32, 15, 29 ,1, 23, 12, 10, 5};

	MergeSort(a, sizeof(a)/sizeof(int));



	for (int i = 0; i < sizeof(a)/sizeof(int); i++)

	{

		cout << a[i] << endl;

	}

}

 

你可能感兴趣的:(归并排序)