文章目录
java实现归并排序
代码实现
import java.util.Arrays;
/**
* 归并排序
*/
public class MergeSort {
/**
* 归并排序
* @param array 要排序的数组
* @return 返回排好序的数组
*/
public int[] mergeSort(int[] array){
// 如果数组中只有一个元素,结束递归
if(array.length == 1){
return array;
}
else{
// 有多个元素时
int mid = array.length/2;
// 将原数组从中间分为两个数组,如果数组元素个数为奇数则右边的数组多一个
int[] array_left = Arrays.copyOfRange(array, 0,mid);
int[] array_right = Arrays.copyOfRange(array, mid, array.length);
// 要合并的数组的左边
int[] arr_l = mergeSort(array_left);
// 要合并的数组的右边
int[] arr_r = mergeSort(array_right);
// 合并左右两个数组
return function(arr_l,arr_r);
// return function(mergeSort(array_left),mergeSort(array_right));
}
}
/**
* 合并两个数组,并且将数组进行排序
* @param array_left
* @param array_right
* @return 将左右两个数组排好序的数组
*/
public int[] function(int[] array_left,int[] array_right){
// 合并的新数组的长度
int length = array_left.length + array_right.length;
// 创建新数组
int[] temp = new int[length];
int index_left = 0;
int index_right = 0;
// 合并两个数组(排序)
for(int i = 0;i < length;i ++){
if(index_left < array_left.length && index_right < array_right.length){
if(array_left[index_left] < array_right[index_right])
temp[i] = array_left[index_left ++];
else
temp[i] = array_right[index_right ++];
}
else{
if(index_left == array_left.length)
temp[i] = array_right[index_right ++];
else
temp[i] = array_left[index_left ++];
}
}
// 返回排序好的数组
return temp;
}
}
测试类
public class Demo {
public static void main(String[] args) {
MergeSort mergeSort = new MergeSort();
int[] array = {4,4,3,6,5,7,9,8,0,1,2};
array = mergeSort.mergeSort(array);
System.out.println("排序结果:");
for(int a : array){
System.out.print(a + " ");
}
}
}
效果
排序结果:
0 1 2 3 4 4 5 6 7 8 9