归并排序

以前一直想实现归并排序,今天终于试验成功,下面是代码部分:

package com.guigu.zhangxx.main;

import java.awt.*;
import javax.swing.*;

public class Test extends JFrame{   
    /**
     * 1、合并算法
     * 2、将非减数组a和非减数组b合并成数组c
     */
    private static final long serialVersionUID = 1L;
    int[] a = {1,2,2,3,4,5};
    int[] b = {2,3,4,5,8,8,9};
    int[] c = new int[a.length + b.length];
    void mergeList(){
        int i = 0;
        int j = 0;
        int k = 0;
        while(i<a.length && j<b.length){
            if(a[i]<=b[j]){
                c[k++] = a[i];
                i++;
            }
            else{
                c[k++] = b[j];
                j++;
            }
        }
        /**
         * 把La剩下的搬回去
         */
        if(i == a.length ){
            while(j < b.length){
                c[k++] = b[j];
                j++;
            }
        }
        /**
         * 把Lb剩下的搬回去
         */
        if(j == b.length ){
            while(i < a.length){
                c[k++] = a[i++];
            }
        }

    }
    void println(){
        for(int k=0;k < (a.length+b.length);k++){
            System.out.print(c[k]+" ");
        }
    }
    public static void main(String[] args) {
        Test test = new Test();
        test.mergeList();
        test.println();
    }
}

结果:
1 2 2 2 3 3 4 4 5 5 8 8 9

说明:
归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否则将第二个有序表中的元素a[j]复制到r[k]中,并令j和k分别加上1,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。