随笔 - 62  文章 - 257  trackbacks - 0
<2006年9月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

I Love Programming & Music.... CS Became CSed....

常用链接

留言簿(7)

随笔分类(64)

随笔档案(62)

文章分类(11)

文章档案(11)

相册

BlOoD

FriEnds

搞起的人们

搜索

  •  

积分与排名

  • 积分 - 114333
  • 排名 - 216

最新评论

阅读排行榜

评论排行榜

    用模板写的一个归并排序,并且注明了用归并排序求逆序数的方法……

#include <stdio.h>

template 
< class T >
void mergeSort( T *a, int size )
{
    
int *b=new T[size];
    mergePass(a,b,
0,size-1);
}


template 
< class T >
void mergePass( T *a, T *b, int l, int r )
{
    
int m;
    
if(l<r)
    
{
        m
=(l+r)/2;
        mergePass(a,b,l,m);
        mergePass(a,b,m
+1,r);
        merge(a,b,l,m,r);
        copy(a,b,l,r);
    }

}


template 
< class T >
void merge( T *a, T *b, int l, int m, int r )
{
    
int i=l,j=m+1;
    
while(i<=m&&j<=r)
    
{
        
if(a[i]<=b[j])
            b[l
++]=a[i++];
        
else
        
{
            b[l
++]=a[j++];
            
//num+=m-i+1;
            
//用归并排序求逆序数则在这里添加这句话,num为全局变量
            
//num+=前路还没有归并的长度+1
        }

    }

    
while(i<=m)
        b[l
++]=a[i++];
    
while(j<=r)
        b[l
++]=a[j++];
}


template 
< class T >
void copy( T *a, T *b, int l, int r )
{
    
while(l<=r)
    
{
        a[l]
=b[l];
        l
++;
    }

}


int main()
{
    
int a[10]={10,9,8,7,6,5,4,3,2,1},i;
    mergeSort(a,
10);
    
for(i=0;i<10;i++)
        printf(
"%d ",a[i]);
    putchar(
'\n');
    
return 0;
}
posted on 2006-10-26 23:01 Asp 阅读(2013) 评论(3)  编辑 收藏 引用 所属分类: Ar!thmEt!c.Self

FeedBack:
# re: 归并排序+求逆序数 2007-11-26 21:15 ACLover
void mergeSort( T *a, int size )
{
int *b=new T[size];
mergePass(a,b,0,size-1);
}
该行
int *b=new T[size];
应该为
T *b=new T[size];

  回复  更多评论
  
# re: 归并排序+求逆序数 2009-04-11 00:45 cx968968
if(a[i]<=b[j])
b[l++]=a[i++];
应改为
if(a[i]<=a[j])
b[l++]=a[i++];  回复  更多评论
  
# re: 归并排序+求逆序数 2009-09-23 20:27 朱镕基
这是什么呀 还好意思说 逆序数 逆序数是什么 请查查再说   回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理