美文网首页
Java实现归并排序

Java实现归并排序

作者: 田真的架构人生 | 来源:发表于2017-08-10 09:39 被阅读0次
    public class MergeSort {
        //将有二个有序数列a[first...mid]和a[mid...last]合并。 
        static void mergearray(int a[], int first, int mid, int last, int temp[]) {
            int i = first, j = mid + 1;
            int m = mid, n = last;
            int k = 0;
    
    
            while (i <= m && j <= n) {
                if (a[i] <= a[j])
                    temp[k++] = a[i++];
                else
                    temp[k++] = a[j++];
            }
    
    
            //如果从mid到last的数据已经遍历完毕,将first到mid剩余的数据拷贝至sorted
            while (i <= m) {
                temp[k++] = a[i++];
            }
    
    
            //如果从first到mid的数据已经遍历完毕,将mid到last剩余的数据拷贝至sorted
            while (j <= n) {
                temp[k++] = a[j++];
            }
    
    
            //至此,temp[]为有序的数组
    
    
            //更改a[]中first至last元素顺序,使其排序
            for (i = 0; i < k; i++) {
                a[first + i] = temp[i];
            }
        }
    
    
        static void mergesort(int a[], int first, int last, int temp[]) {
            if (first < last) {
                int mid = (first + last) / 2;
                mergesort(a, first, mid, temp); //递归,将数组切割至最小(1个元素)
                mergesort(a, mid + 1, last, temp); //同上
                mergearray(a, first, mid, last, temp); //再将相邻的二个元素合并、排序,往上递归,直至最后合并成一个最大的有序数组 
            }
        }
    
    
        public static void main(String[] args) {
            int[] x = { 6, 2, 4, 1, 5, 9, 3 };
            int[] sorted = new int[x.length];
            mergesort(x, 0, x.length - 1, sorted);
    
    
            for (int i = 0; i < sorted.length; i++) {
                System.out.println(sorted[i]);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:Java实现归并排序

          本文链接:https://www.haomeiwen.com/subject/jlgcrxtx.html