package com.fine.sort;
import java.util.Arrays;
/**
* 归并排序
* @author Fine
*
*/
public class MergeSort {
public static void main(String[] args) {
int[] arr= {2,1,4,5,3,6,7,9};
int[] temp = new int[arr.length];
mergeSort(arr,0,arr.length -1,temp);
System.out.println(Arrays.toString(arr));
}
//将数组进行递归切分
public static void mergeSort(int[] arr,int left,int right,int[] temp) {
if (left<right) {
int mid = (left+right)/2;
mergeSort(arr,left,mid,temp);//向左开始进行切分
mergeSort(arr,mid+1,right,temp);//向右开始进行切分
merge(arr,left,mid,right,temp);//切分完成后进行合并
}
}
/**
* 合并两个数组的元素 并且拷贝到原来的数组中去
* @param arr 原始数组
* @param left 第一部分的左边界
* @param mid 第一部分的有边界
* @param right 第二部分的右边界
* @param temp 临时数组
*/
public static void merge(int[] arr,int left,int mid,int right,int[] temp) {
int i = left;//第一部分数组开始位置
int j = mid+1;//第二部分数组开始的位置
int t = 0;//临时数组开始的位置
//一 将两个有序数组进行合并,到一个temp数组中
while(i<=mid&&j<=right) {
temp[t++]=arr[i]<=arr[j]?arr[i++]:arr[j++];
}
while(i<=mid) {
temp[t++]=arr[i++];
}
while(j<=right) {
temp[t++]=arr[j++];
}
//二 将数组赋值到arr中 (Object, int, Object, int, int)
t=0;
int tempLeft = left;
while(tempLeft<=right) {
arr[tempLeft]=temp[t];
t++;
tempLeft++;
}
System.out.println("left:"+left+"right:"+right);
}
}
归并排序
最新推荐文章于 2023-09-03 20:36:33 发布