美文网首页
2.4归并排序

2.4归并排序

作者: 蜗牛滴追逐 | 来源:发表于2018-09-18 10:32 被阅读0次

2.4归并排序
时间复杂度o(n*logn)

思路:0~N-1 个数
1.将数组中的每个数成为长度为1的有序区间
2.将相邻有序区间长度为1的合并得到长度为2的有序区间
3.将相邻有序区间长度为2的合并得到长度为4的有序区间
.......
依次合并得到长度为N的有序区间

//归并排序
package chenzp;

import java.util.Scanner;

public class barrier2_5 {

public static int[] barrier(int[] A, int n) {
     sort(A,0,n-1);
       return A;
}

 public static void sort(int[] data,int left,int right){
     if(left<right){
         int middle=(left+right)/2;
         //划分左右
         sort(data,left,middle);
          sort(data,middle+1,right);
         //合并左右
         merge(data,left,middle,right);
     }
 }
  
 //合并左右两个子数组
 public static void merge(int[] data,int left,int middle,int right){
     //临时数组
     int[] tempArr=new int[right-left+1];
     //左边数组游标
     int leftIndex=left;
     //右边数据游标
     int rightIndex=middle+1;
     //临时数组游标
     int tempIndex=0;
      
     while(leftIndex<=middle&&rightIndex<=right){
         //临时数组选取左、右子数组中小数值
        if(data[leftIndex]<data[rightIndex]){
            tempArr[tempIndex++]=data[leftIndex++];
        }else{
            tempArr[tempIndex++]=data[rightIndex++];
        }
     }
     //剩余的直接放入
     while(leftIndex<=middle){
            tempArr[tempIndex++]=data[leftIndex++];
     }
     //剩余的直接放入
     while(rightIndex<=right){
            tempArr[tempIndex++]=data[rightIndex++];
     }
     //将临时数组放回原数组相应位置
     int temp=0;
     while((temp+left)<=right){
         data[left+temp]=tempArr[temp];
         temp++;
     }
 }

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int a[] = new int[n];
    for (int i = 0; i < n; i++) {
        a[i] = sc.nextInt();
    }

    barrier2_5.barrier(a, n);

    for (int i : a) {
        System.out.println(i);
    }
}

}

相关文章

  • 2.4归并排序

    2.4归并排序时间复杂度o(n*logn) 思路:0~N-1 个数1.将数组中的每个数成为长度为1的有序区间2....

  • 排序算法

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

  • 排序二:归并、快排

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

  • 剑指offer学习笔记:2.4 算法和数据操作

    2.4 算法和数据操作 重点关注二分查找,归并排序和快速排序。很多算法都有递归和循环两种不同实现方法。通常基于递归...

  • java归并排序

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

  • 算法—排序篇2

    1、归并排序(Merging Sort) 归并排序(Merging Sort): 就是利用归并的思想实现排序⽅法....

  • 常见的排序算法(2)

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

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

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

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

  • 归并排序(二路归并排序)

    归并排序的思路 归并排序是通过“归并”操作完成排序的,将两个或者多个有序子表归并成一个子表。归并排序是“分治法”的...

网友评论

      本文标题:2.4归并排序

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