归并排序(merge sort)算法实现

归并排序(merge sort)体现了分治的思想,即将一个待排序数组分为两部分,对这两个部分进行归并排序,排序后,再对两个已经排序好的数组进行合并。这种思想可以用递归方式很容易实现。归并排序的时间复杂度为 O(nlogn),空间复杂度为 O(n)

实现代码如下:
#include <stdio.h> 
#include  " common.h "  
void merge( int data[],  int p,  int q,  int r) 
{     
     int i, j, k, n1, n2;     
    n1 = q - p +  1;     
    n2 = r - q;     
     int L[n1];     
     int R[n2];      
     for(i =  0, k = p; i < n1; i++, k++)         
        L[i] = data[k];     
     for(i =  0, k = q +  1; i < n2; i++, k++)         
        R[i] = data[k];     
     for(k = p, i =  0, j =  0; i < n1 && j < n2; k++)     
    {         
         if(L[i] > R[j])         
        {             
            data[k] = L[i];             
            i++;         
        }         
         else         
        {             
            data[k] = R[j];             
            j++;         
        } 
    }
     if(i < n1)     
    {         
         for(j = i; j < n1; j++, k++)             
        data[k] = L[j];     
    }     
     if(j < n2)     
    {         
         for(i = j; i < n2; i++, k++)             
            data[k] = R[i];     
    }  
}
void merge_sort( int data[],  int p,  int r) 
{     
     if(p < r)     
    {         
         int q = (p + r) /  2;         
        merge_sort(data, p, q);         
        merge_sort(data, q +  1, r);         
        merge(data, p, q, r);     
    } 


void test_merge_sort() 
{   
     int data[] = { 4412145, - 123, - 10121};     
    printf( " -------------------------------merge sort----------------------------\n ");    
    out_int_array(data,  7);     
    merge_sort(data,  06);     
    out_int_array(data,  7); 


int main() 
{    
    test_merge_sort();    
     return  0
}  

本文转自银河使者博客园博客,原文链接http://www.cnblogs.com/nokiaguy/archive/2008/05/14/1197374.html如需转载请自行联系原作者

银河使者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值