排序原理:
1.尽可能的一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,直到拆分后的每个子组的元素个数是1为止。
2.将相邻的两个子组进行合并成一个有序的大组;
3.不断的重复步骤2,直到最终只有一个组为止。
排序过程:
例:{8,4,5,7,1,3,6,2}
![](https://img-blog.csdnimg.cn/img_convert/393c60e63dc094a7c425dd4bd0be250c.png)
package com.sort;
public class MerageSort {
public static void merageSort(int[] array) {
int low = 0;
int high = array.length - 1;
merageSort(array, low, high);
}
private static void merageSort(int[] array, int low, int high) {
if (low >= high) {
return;
}
int middle = low + (high - low) / 2;
merageSort(array,low,middle);
merageSort(array,middle+1,high);
mergage(array,low,middle,high);
}
private static void mergage(int[] array, int low, int middle, int high) {
int left = low;
int right = middle+1;
int index = low;
int[] assit = new int[array.length];
while(left <= middle && right <= high ){
if(less(array[left],array[right])){
assit[index++] = array[left++];
}else{
assit[index++] = array[right++];
}
}
while(left <= middle){
assit[index++] = array[left++];
}
while(right <= high ){
assit[index++] = array[right++];
}
for (int i = low; i <= high ; i++) {
array[i] = assit[i];
}
}
public static boolean less(int a, int b) {
return (a - b < 0);
}
public static void exchange(int[] array, int index1, int index2) {
int temp;
temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
}
}
测试类:
package com.testsort;
import java.util.Arrays;
import static com.sort.MerageSort.merageSort;
public class TestMerage {
public static void main(String[] args) {
int[] array = {8,4,5,7,1,3,6,2};
merageSort(array);
System.out.println(Arrays.toString(array));
}
}