归并排序

归并排序重在“归并”一词,即先递归分解数组,再合并数组的过程。

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

 

posted @ 2015-04-16 10:24  scott_dingg  阅读(137)  评论(0编辑  收藏  举报