Java归并排序

简介: 归并排序1、原理归并排序是一种概念上最简单的排序算法,与快速排序一样,归并排序也是基于分治法的。归并排序将待排序的元素序列分成两个长度相等的子序列,为每一个子序列排序,然后再将他们合并成一个子序列。合并两个子序列的过程也就是两路归并。2、复杂度归并排序是一种稳定的排序算法,归并排序的主要问题在于它需要一个与待排序数组一样大的辅助数组空间。由于归并排序每次划分时两个子序列的长度基本一样,所以归并排序最好、最差和平均时间复杂度都是nlog2n。

归并排序

1、原理

归并排序是一种概念上最简单的排序算法,与快速排序一样,归并排序也是基于分治法的。归并排序将待排序的元素序列分成两个长度相等的子序列,为每一个子序列排序,然后再将他们合并成一个子序列。合并两个子序列的过程也就是两路归并。

2、复杂度

归并排序是一种稳定的排序算法,归并排序的主要问题在于它需要一个与待排序数组一样大的辅助数组空间。由于归并排序每次划分时两个子序列的长度基本一样,所以归并排序最好、最差和平均时间复杂度都是nlog2n。

public class test1 {
    public void merge(int []a, int left, int mid, int right) {
        int []tmp = new int[a.length];
        int p1 = left, p2 = mid + 1, k = left;
        while (p1 <= mid && p2 <= right) {
            if (a[p1] <= a[p2]) {
                tmp[k++] = a[p1++];
            } else {
                tmp[k++] = a[p2++];
            }
        }
        while (p1 <= mid) {
            //如果第一个序列未检测完,直接将后面所有元素加到合并的序列中
            tmp[k++] = a[p1++];
        }
        while (p2 <= right) {
            tmp[k++] = a[p2++];
        }
        //复制原来数组
        for (int i = left; i <= right; i++) {
            a[i] = tmp[i];
        }
    }
    public void mergeSort(int[] a, int start, int end) {
        if (start < end) {
            int mid = (start + end) / 2;
            mergeSort(a, start, mid);
            mergeSort(a, mid + 1, end);
            merge(a, start, mid, end);
        }
    }
    @Test
    public void test3() {
        System.out.println("hello");
        int[] a = {49, 38, 65, 97, 76, 13, 27, 50};
        mergeSort(a, 0, a.length - 1);
        System.out.println("ok to sort by time");
        for (int e : a) {
            System.out.print(e + " ");
        }
    }
}
相关文章
|
3月前
|
Java
java实现归并排序
java实现归并排序
39 0
|
3月前
|
存储 搜索推荐 算法
Java代码归并排序
Java代码归并排序
23 0
|
7天前
|
搜索推荐 Java
|
2月前
|
Java
归并排序(java)
归并排序(java)
21 1
|
2月前
|
搜索推荐 算法 Java
Java中的快速排序、归并排序和堆排序是常见的排序算法。
【6月更文挑战第21天】Java中的快速排序、归并排序和堆排序是常见的排序算法。快速排序采用分治,以基准元素划分数组并递归排序;归并排序同样分治,先分割再合并有序子数组;堆排序通过构建堆来排序,保持堆性质并交换堆顶元素。每种算法各有优劣:快排平均高效,最坏O(n²);归并稳定O(n log n)但需额外空间;堆排序O(n log n)且原地排序,但不稳定。
30 3
|
3月前
|
算法 Java
<八大排序>万字详解(Java实现).插入排序、希尔排序、堆排序、快速排序、归并排序、计数排序...
<八大排序>万字详解(Java实现).插入排序、希尔排序、堆排序、快速排序、归并排序、计数排序
20 0
|
3月前
|
机器学习/深度学习 算法 搜索推荐
数据结构与算法(Java篇)笔记--归并排序
数据结构与算法(Java篇)笔记--归并排序
|
算法 Java
java实现归并排序
java实现归并排序
49 0
|
3月前
|
Java
使用Java实现合并两个数组[归并排序]
使用Java实现合并两个数组[归并排序]
|
10月前
|
存储 搜索推荐 Java
深入了解归并排序:原理、性能分析与 Java 实现
归并排序(Merge Sort)是一种高效且稳定的排序算法,其优雅的分治策略使它成为排序领域的一颗明珠。它的核心思想是将一个未排序的数组分割成两个子数组,然后递归地对子数组进行排序,最后将这些排好序的子数组合并起来。
124 1
深入了解归并排序:原理、性能分析与 Java 实现