归并排序

pseudo-code:

MERGE-SORT(A, p, r)
1    if p < r
2        q = (p + r) / 2
3        MERGE-SORT(A, p, q)
4        MERGE-SORT(A, q+1,  r)
5        MERGE(A, p, q, r)

MERGE(A, p, q, r)
1    n1 = q - p +1
2    n2 = r - q
3    let  L[1....n1 + 1] and  R[1....n2 + 1] be new array
4    for i = 1 to n1
5        L[i] = A[p + i - 1]
6    for j = 1 to n2
7        R[j] = A[q + j]
8    L[n1 + 1] = INT_MAX
9    R[n2 + 1] = INT_MAX
10  for k = p to r
11  i = 1
12  j = 1
13  if L[i] <= R[j]
14      A[k] = L[i]
15      i = i + 1
16  else A[k] = R[j]
17      j = j + 1


 C语言实现:

void Merge ( int A [], int p , int q, int r )  
{
       int L [ 100], R[ 100 ];
       int n1 = q - p + 1 ;
       int n2 = r - q;

       for ( int i = 0 ; i < n1; i++)
             L [i ] = A[ p + i];
       for ( int j = 0 ; j < n2; j++)
             R [j ] = A[ q + j + 1 ];

       L [n1 ] = INT_MAX;
       R [n2 ] = INT_MAX;

       int i = 0 ;
       int j = 0 ;
       for ( int k = p ; k <= r; k++)
       {
             if ( L [i ] <= R[ j ])
                   A [k ] = L[ i ++];
             else
                   A [k ] = R[ j ++];
       }
}

void Merge_Sort ( int A [], int p , int r)  // p, r 为下标
{
       if ( p < r)
       {
             int q = ( p + r ) / 2;
             Merge_Sort (A , p , q );
             Merge_Sort (A , q + 1 , r );
             Merge (A , p , q , r );
       }
}


复杂度: O (Nlog(N) )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值