文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>非递归分治法排序 MergeSort without recursion

非递归分治法排序 MergeSort without recursion

时间:2010-10-07  来源:长江西岸

一道作业题,网上没找到相关代码,就自己写了一个,比较有意思,经随机数10000规模测试通过。

 

关键在于合的时候找准“分点”

 

void Merge(int L, int R, int Mid, int A[], int Tmp[])
{
        int i, TmpIndex = L, LIndex = L, RIndex = Mid+1;

        while(LIndex <= Mid && RIndex <= R)
                Tmp[TmpIndex ++] = A[LIndex] <= A[RIndex] ? A[LIndex ++] : A[RIndex ++];

        while(LIndex <= Mid)
                Tmp[TmpIndex ++] = A[LIndex ++];
        while(RIndex <= R)
                Tmp[TmpIndex ++] = A[RIndex ++];

        for(i=L; i<=R; i++)
                A[i] = Tmp[i];
}

void MergeSort(int A[], int N)
{
        int *Tmp = (int *)malloc( N * sizeof(int) );
        int i, j, R, Mid;
        for(i=2; i<N; i <<= 1)
        {
                for(j=0; j<=N-1; j+=i)
                {
                        Mid = j + (i>>1) - 1;
                        if(j+i-1 > N-1) 
                                R = N-1;
                        else 
                                R = j+i-1;
                        Merge(j, R, Mid, A, Tmp);
                }
        }
        Merge(0, N-1, (i>>1)-1, A, Tmp);
        free(Tmp);
}

 

相关阅读 更多 +
排行榜 更多 +
野生恐龙射击生存安卓版

野生恐龙射击生存安卓版

飞行射击 下载
战场狙击手

战场狙击手

飞行射击 下载
1v1布娃娃射击安卓版

1v1布娃娃射击安卓版

飞行射击 下载