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

    package com.hzins.suanfa;
    
    
    /**
     * 归并排序
     * @author Administrator
     *
     */
    public class MergeSort {
        public static void merge(int[] nums, int low, int mid, int high){
            int[] temp = new int[high - low + 1];
            int i = low;
            int j = mid + 1;
            int k =0;
            while(i <= mid && j <= high){
                if(nums[i] <= nums[j]){
                    temp[k ++] = nums[i ++];
                }else{
                    temp[k ++] = nums[j ++];
                }
            }
            while(i <= mid){
                temp[k ++] = nums[i ++];
            }
            while(j <= high){
                temp[k ++] = nums[j ++];
            }
            for (int k2 = 0; k2 < temp.length; k2++) {  
                nums[k2 + low] = temp[k2];  
            }  
        }
        /**
         * 首先,递归最底层的运算开始是两个单个元素当成子数组,所以递归的出口是left >=right
         * 此时递归到倒数第二层,left比right小1, 算出的mid为left,此时,出口就是mergeSort(arr, mid + 1, right)
         * 和mergeSort(arr, left, mid)
         * 
         * @param arr
         * @param left
         * @param right
         */
        public static void mergeSort(int[] arr, int left,int right){
            if(left >= right){
                return ;
            }
            int mid = (left + right) / 2;
            mergeSort(arr, mid + 1, right);
            mergeSort(arr, left, mid);
            merge(arr, left, mid, right);
        }
        public static void main(String[] args) {
            int[] a = {-1,2,-3,4,-5,6,-7,8,-9};
            mergeSort(a, 0, a.length - 1);
            for(int i = 0;i<a.length;i++){
                System.out.println(a[i] + " ");
            }
        }
    }
  • 相关阅读:
    愤怒的小鸟(angry bird )
    1101模拟
    1029模拟题解
    1028题解
    图床
    数据结构
    博弈论
    差分
    前缀和
    快读和快写
  • 原文地址:https://www.cnblogs.com/caobojia/p/6770508.html
Copyright © 2011-2022 走看看