| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 495 人关注过本帖
标题:Java 二路归并算法
只看楼主 加入收藏
jdshaoheyi
Rank: 1
等 级:新手上路
帖 子:133
专家分:5
注 册:2008-11-6
结帖率:100%
收藏
 问题点数:0 回复次数:0 
Java 二路归并算法
我自己写出来的时间复杂度没那么小,从网上看了一个归并算法,谁可以帮我解释一下。。。。

希望有大侠不吝赐教。。。。

鄙人不胜感激。。。。

public class debug {
   
    public static void merge(int[] data, int p, int q, int r) {
        
        int[] B = new int[data.length];
        int s = p;
        int t = q + 1;
        int k = p;
        
        while (s <= q && t <= r) {
            if (data[s] <= data[t]) {
                B[k] = data[s];
                s++;
            } else {
                B[k] = data[t];
                t++;
            }
            k++;
        }
        if (s == q + 1) {
            B[k++] = data[t++];
        } else {
            B[k++] = data[s++];
        }

        for (int i = p; i <= r; i++) {
            data[i] = B[i];
        }
    }//end merge

    public static void merge_sort(int[] data, int left, int right) {
        
        int t = 1;// 每组元素个数
        int size = right - left + 1;
        while (t < size) {
            int s = t;// 本次循环每组元素个数
            t = 2 * s;
            int i = left;
            
            while (i + (t - 1) < size) {
                merge(data, i, i + (s - 1), i + (t - 1));
                i = i + t;
            }
            if (i + (s - 1) < right) {
                merge(data, i, i + (s - 1), right);
            }
        }
    }
   
    public static void main(String [] args)
    {
        int a[] = {1,9,2,5,4,3,7,6,8,0};
        merge_sort(a,0,9);
        for(int i =0 ;i<=9;i++)
            System.out.print(a[i]+",");
    }
}
搜索更多相关主题的帖子: 算法 Java 
2009-10-08 16:50
快速回复:Java 二路归并算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026781 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved