美文网首页
排序-归并排序

排序-归并排序

作者: 格林哈 | 来源:发表于2021-05-30 19:59 被阅读0次

1 归并排序

  • 思路

    • 分治思想
      • 递归的把已有数据均分为两个子数据,直到子数据有序,合并子数据
  • 复杂度

    • 时间
      • 最好,最差,平均 都是O(NlgN)
    • 空间
      • O(N)
  • 代码

package com.datastructure.sort;

import java.util.Arrays;

/**
 * SortMerge class
 *
 * @author 格林
 * @date 2021-05-30
 */
public class SortMerge {

    private static void  mergeSort(int[] arr, int left, int right) {
        if( left == right) {
            return ;
        }
        int middle = (right + left) / 2;
        mergeSort(arr,left,middle);
        mergeSort(arr,middle + 1 , right);
        merge(arr,left,right);
    }

    private static void merge(int[] arr, int left,int right ) {
        // rightArr 开始位置
        int middle = (right + left) / 2 + 1;
        int leftSize = middle - left;
        int rightSzie = right - middle + 1;
        int[] leftArr = new int[leftSize];
        int[] rightArr = new int[rightSzie];
        System.arraycopy(arr,left,leftArr,0,leftSize );
        System.arraycopy(arr, middle ,rightArr,0,rightSzie );
        int j = 0 , i = 0, k = left;
        while ( i < leftSize && j <rightSzie ) {
            if(leftArr[i] < rightArr[j]) {
                arr[k++] = leftArr[i++];
            } else {
                arr[k++] = rightArr[j++];

            }
        }
        while ( i < leftSize) {
            arr[k++] = leftArr[i++];
        }
        while (j < rightSzie) {
            arr[k++] = rightArr[j++];
        }
    }
    public static void main(String[] args) {
        int[] arr = {1,3,7,4,5,1,6,7,9};
        mergeSort(arr,0,arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }
}

  • 控制台输出
[1, 1, 3, 4, 5, 6, 7, 7, 9]

相关文章

  • 排序算法

    约定 选择排序 冒泡排序 插入排序 希尔排序 归并排序1. 归并方法2. 自顶向下归并排序3. 自底向上归并排序 ...

  • 排序二:归并、快排

    文章结构 归并排序 快速排序 源码 1. 归并排序 1.1 什么是归并排序 归并排序的思想是:将待排序的区间平分成...

  • 算法 第二章第二部分笔记

    各种排序算法的性能特点 选择排序 插入排序 希尔排序 归并排序 本地归并排序 自底向上的归并排序 快速排序 三向切...

  • 常见的排序算法(2)

    要点 快速排序 归并排序 1.快速排序 2.归并排序

  • Datawhale | 编程第6期 Test 3

    排序 1.实现归并排序、快速排序、插入排序、冒泡排序、选择排序、堆排序(选做) 归并排序 快速排序 插入排序 冒泡...

  • php-归并排序、快速排序、堆排序

    归并排序、快速排序、堆排序 时间复杂度 O(nlogn) 归并排序 快速排序(快排) 堆排序

  • 排序 -- 快排/归并

    聊聊排序吧 冒泡排序 选择排序 插入排序 快速排序 归并排序 计数排序 桶排序 堆排序 本篇 快排/归并 之前的三...

  • java归并排序

    归并排序什么是归并排序:图解归并排序归并排序有两种实现方式,一是基于递归,而是基于迭代1)基于递归的归并排序: 基...

  • 6-十大排序篇二

    十大排序(2) 今天先学习第二大类排序算法 归并排序 排序排序 希尔排序 堆排序 1.归并排序 分析:利用归并的思...

  • 排序方法

    1.选择排序 2.插入排序 3.冒泡排序 归并排序归并排序5.快速排序快速排序

网友评论

      本文标题:排序-归并排序

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