【歸併排序】java
【歸併排序實例】數組
package com.sort.demo4; import java.util.Arrays; /** * 歸併排序 */ public class MergeSort { public static void main(String[] args) { int[] arr = new int[]{1,4,5,7,3,9,8,0,2,6}; System.out.println(Arrays.toString(arr)); mergeSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } public static void mergeSort(int[] arr,int low, int high) { int middle = (high+low)/2; if(low<high) { //處理左邊 mergeSort(arr, low, middle); //處理右邊 mergeSort(arr, middle + 1, high); //歸併 merge(arr, low, middle, high); } } public static void merge(int[] arr,int low,int middle, int high) { //用於存儲歸併後的臨時數組 int[] temp = new int[high-low+1]; //記錄第一個數組中須要遍歷的下標 int i= low; //記錄第二個數組中須要遍歷的下標 int j =middle+1; //用於記錄在臨時數組中存放的下邊 int index = 0; //遍歷兩個數組去除小的數字,放入臨時數組中 while (i<=middle && j<=high){ //第一個數組的數據更小 if(arr[i]<=arr[j]){ //把小的數據放入臨時數組中 temp[index]=arr[i]; //讓下標向後移一位 i++; }else { temp[index] = arr[j]; j++; } index++; } //處理多餘的數據 while (j<=high){ temp[index] = arr[j]; j++; index++; } while (i<=middle){ temp[index]=arr[i]; i++; index++; } //把臨時數組中的數據從新存入原數組 for (int k=0;k<temp.length;k++){ arr[k+low] = temp[k]; } } }