合并排序的递归算法

来源:互联网 发布:芒果tv会员账号淘宝 编辑:程序博客网 时间:2024/06/05 06:45

合并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

合并排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。合并排序也叫归并排序。
话不多说,上代码:

import java.util.Scanner;//合并排序public class Test10 {    public static void mergeSort(int a[], int left, int right) {        if (left < right) {// 至少有2个元素            int i = (left + right) / 2; // 取中点            mergeSort(a, left, i);            mergeSort(a, i + 1, right);            int b[]=new int[a.length];            merge(a, b, left, i, right); // 合并两个排好序的数组段到一个新的数组b中            Copy(a, b, left, right); // 将合并后的数组段再复制回数组a中        }    }    public static void merge(int c[], int d[], int l, int m, int r) {        int i = l, j = m + 1, k = l;        while ((i <= m) && (j <= r))            if (c[i] <= c[j])                d[k++] = c[i++];            else                d[k++] = c[j++];        if (i > m)            for (int q = j; q <= r; q++)                d[k++] = c[q];        else            for (int q = i; q <= m; q++)                d[k++] = c[q];    }    public static void Copy(int a[], int b[], int m, int n) {        for (int i = m; i <= n; i++)            a[i] = b[i];    }    public static void main(String[] args) {        try {            System.out.println("排序的元素个数:");            Scanner sc = new Scanner(System.in);            int n = sc.nextInt();            int list[] = new int[n];            System.out.println("依次输入所有的元素:");            for (int i = 0; i <= list.length - 1; i++) {                list[i] = sc.nextInt();            }            mergeSort(list, 0, list.length-1);            for (int k = 0; k < list.length; k++) {                System.out.print(list[k] + " ");            }        } catch (Exception e) {            e.printStackTrace();        }    }}

运行结果:
这里写图片描述
其他语言的参考:
百度百科

这里写图片描述这里写图片描述

1 0
原创粉丝点击