归并排序
归并排序重在“归并”一词,即先递归分解数组,再合并数组的过程。
#include<stdio.h> void heBin(int a[] , int first , int mid , int last) { // 合并数组的左边和右边 int *temp = new int[last - first + 2] ; int i = first , j = mid+1 , k = 0 ; for( ; i <= mid && j <= last ;) { if(a[i] <= a[j]) temp[k++] = a[i++] ; else temp[k++] = a[j++] ; } for(; i <= mid ; i++) temp[k++] = a[i] ; for(; j <= last ; j++) temp[k++] = a[j] ; for(i = 0 ; i < k ; i++) a[first+i] = temp[i] ; delete[] temp ; } void mergesort(int a[] , int first , int last) { // 递归分解数组 if(first < last) { // 如果数组还能再次分解 int mid = (first + last) / 2 ; mergesort(a,first,mid) ; // 分解出左边 mergesort(a,mid+1,last) ; // 分解出右边 heBin(a,first,mid,last) ; // 左边和右边合并 } } int main() { int a[] = {9,6,3,8,5,2,7,4,1,0} ; mergesort(a,0,9) ; for(int i = 0 ; i < 9 ; i++) printf("%d ",a[i]) ; printf("\n") ; return 0 ; }