首页 > 代码库 > 归并排序

归并排序

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

#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;	}}

 

归并排序