数组之归并排序
数组之归并排序
归并排序算法思想:归并排序就是利用归并的思想实现排序的方法,它的原理是假设初始序列有N个记录,则可以看成是N个有序的子序列,每个子序列的长度为1,然后两两归并,得到N/2个长度为2或1的有序子序列,再两两合并...如此重复,直到得到一个长度为N的有序序列为止,这种排序方法称为2路归并排序。
代码实现
package com.sun.base.Array.text;
import java.util.Arrays;
/**
* @Author: fei
* @CreateTime:2020-11-26
*/
public class Demo08 {
public static void main(String[] args) {
int[] arr = new int[]{8,9,5,-7,55,2,99,400,-7,25};
mergeSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
//归并排序
private static void mergeSort(int[] arr, int startIndex, int endIndex) {
int centerIndex = (startIndex+endIndex)/2;
//拆分、递归、归并(先拆再并)
if(startIndex<endIndex){
mergeSort(arr,startIndex,centerIndex);
mergeSort(arr,centerIndex+1,endIndex);
merge(arr,startIndex,centerIndex,endIndex);
}
}
//归并
private static void merge(int[] arr, int startIndex, int centerIndex, int endIndex) {
//定义临时数组
int[] tempArr=new int[endIndex-startIndex+1];
//定义左边数组的起始索引
int i=startIndex;
//定义右边数组的起始索引
int j=centerIndex+1;
//定义临时数组的起始索引
int index = 0;
//比较两个数组的元素大小,小的放入临时数组中
while (i<=centerIndex&&j<=endIndex){
if(arr[i]<=arr[j]){
tempArr[index]=arr[i];
i++;
}else {
tempArr[index]=arr[j];
j++;
}
index++;
}
//处理剩余元素
while (i<=centerIndex){
tempArr[index]=arr[i];
i++;
index++;
}
while (j<=endIndex){
tempArr[index]=arr[j];
j++;
index++;
}
//将临时数组中的元素取到元素数组中
for (int k = 0; k < tempArr.length; k++) {
arr[k+startIndex]=tempArr[k];
}
}
}
运行


浙公网安备 33010602011771号