java实现简单归并排序算法(初学入门)

来源:互联网 发布:雷欧mac全灭赛文复活 编辑:程序博客网 时间:2024/04/28 02:41

归并排序

归并排序是采用分治法的思想,将已经排好序的两个子序列合并成一个有序的子序列,建立在归并操作上的一种有效的排序算法。归并排序的思想很多算法书上和网上都有,博主比较小白,就不在这里给大家进行详细的讲解了。

下面是简单的归并排序算法:

package cn.swu.edu;import java.util.Arrays;public class Merge// Merge(排序)类{    /*     * 对子序列进行排序      * a[]数组      * first 指示序列第一个元素      * last 指示序列最后一个元素     *      */    public static void merge(int[] a, int first, int mid, int last) {        // temp数组长度为序列长//        int[] temp = new int[last - first + 1];        // 左边子序列第一个元素        int i = first;        // 右边子序列第一个元素        int j = mid + 1;        int k = 0;        /*         * 把较小的数先移到新数组中          * 通过递归寻找原数组中比较的数值         */        while (i <= mid && j <= last) {            if (a[i] < a[j]) {                temp[k++] = a[i++];            } else {                temp[k++] = a[j++];            }        }        // 把左边剩余的数移入数组        while (i <= mid) {            temp[k++] = a[i++];        }        // 把右边边剩余的数移入数组        while (j <= last) {            temp[k++] = a[j++];        }        // 把新数组中的数覆盖a数组        for (int k2 = 0; k2 < temp.length; k2++) {            a[k2 + first] = temp[k2];        }    }    /*     * 归并排序思路:      * 先分割--将整的序列先分成一个个子序列      * 在排序--将分割的子序列分别进行排序      * 后合并--将排好序的子序列合并     * 再排序--再将最后合并的序列排序     */    public static void mergeSort(int[] a, int low, int high) {        int mid = (low + high) / 2;        if (low < high) {            // 左边排序            mergeSort(a, low, mid);            // 右边排序            mergeSort(a, mid + 1, high);            // 左右归并            merge(a, low, mid, high);            System.out.println(Arrays.toString(a));        }    }    public static void main(String[] args) {        int a[] = { 4, 3, 2, 1, 5, 6, 7, 8, 9, 10 };        mergeSort(a, 0, a.length - 1);        System.out.println("排序结果:" + Arrays.toString(a));    }}

运行结果:
[3, 4, 2, 1, 5, 6, 7, 8, 9, 10]
[2, 3, 4, 1, 5, 6, 7, 8, 9, 10]
[2, 3, 4, 1, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
排序结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


   算法比较简单,因为博主本人也是这几天才算真正学习了归并排序算法,这个代码是对归并排序的一个非常简单的应用,这个代码部分是博主之前参考网上的例子自己整理的,之后自己有重新写了一遍加深印象,第一次写博客。如果哪里有错误,还请各位大佬指出来,如果有需要的我们可以一起交流学习。
原创粉丝点击