zoukankan      html  css  js  c++  java
  • 归并排序

    归并排序

    3  5   1  8  4  

    先将数组分成

     先将左边和右边分别排好序

     再利用类似外排的方式把整体排序:

    左边1<右边4 :1

    左边移动指针到3,左边3<右边4:  1   3

    左边移动指针到5,左边5>右边4:   1   3  4

    右边移动指针到8,左边5<右边8:  1  3  4  5

    左边全部用完,把右边一次放进排好序的数组:  1  3  4  5  8

     1 package com.sort.demo;
     2 
     3 public class Mergesort extends Sort {
     4 
     5     @Override
     6     public void sort(int[] arr) {
     7         if (arr==null||arr.length<2) return;
     8         processSort(arr,0,arr.length-1);
     9     }
    10 
    11     public void processSort(int[] arr, int L, int R) {
    12         if (L == R)
    13             return;
    14         int mid = (L + R) / 2;
    15         //左边排序
    16         processSort(arr, L, mid);
    17         //右边排序
    18         processSort(arr, mid + 1, R);
    19         merge(arr,L,mid,R);
    20     }
    21 
    22     public void merge(int[] arr, int L, int mid, int R) {
    23 
    24         if (arr==null||arr.length<2) return;
    25         int[] help=new int[R-L+1];
    26         int i=0;
    27         int p1=L;
    28         int p2=mid+1;
    29         //左右两边的有序数组都不越界
    30         while (p1<=mid&&p2<=R){
    31             help[i++]=arr[p1]>arr[p2]?arr[p2++]:arr[p1++];
    32         }
    33         //右边越界,左边依次copy到结果数组
    34         while (p1<=mid){
    35             help[i++]=arr[p1++];
    36         }
    37 //        左边越界,右边依次copy到结果数组
    38         while (p2<=R){
    39             help[i++]=arr[p2++];
    40         }
    41         //再copy回原数组
    42         for(i=0;i<help.length;i++){
    43 //            很容易出错的地址,这个地方应该是L+i,而不是i,因为从arr的L到R合并
    44             arr[L+i]=help[i];
    45         }
    46     }
    47 
    48     public static void main(String[] args) {
    49         Mergesort sort=new Mergesort();
    50         Test.test(sort);
    51     }
    52 }
    归并排序
  • 相关阅读:
    pandas Dataframe filter
    process xlsx with pandas
    data manipulate in excel with easyExcel class
    modify registry in user environment
    add number line in vim
    java import webservice
    ctypes MessageBoxA
    music 163 lyrics
    【python实例】自动贩卖机
    【python基础】sys模块(库)方法汇总
  • 原文地址:https://www.cnblogs.com/zqr99/p/11840539.html
Copyright © 2011-2022 走看看