归并排序算法思路:
对待排数组进行简单递归,左边排好序,右边排好序,使其整体有序
Java代码:
public class mergeSort {
//归并排序
public static void mergesort(int[] arr){
//判断数组,当数组为空或者只有一个元素时,无法排序,直接返回
if(arr == null || arr.length < 2){
System.out.println("此数组无法排序!");
return;
}
process(arr, 0, (arr.length - 1));
}
//递归调用process实现对数组的拆分,然后排序
public static void process(int[] arr , int L, int R){
if(L == R){
return;
}
int m = L + ((R - L) >> 1);
process(arr, L, m);
process(arr, m + 1 ,R);
merge(arr, L, R, m);
}
//排序的实现
public static void merge(int[] arr, int L, int R, int m){
int[] help = new int[R - L + 1];
int n = 0;
int p1 = L;
int p2 = m + 1;
while(p1 <= m && p2 <= R){
if(arr[p1] <= arr[p2]){
help[n] = arr[p1];
n++;
p1++;
}else {
help[n] = arr[p2];
n++;
p2++;
}
}
while(p1 <= m) {
help[n] = arr[p1];
n++;
p1++;
}
while(p2 <= R) {
help[n] = arr[p2];
n++;
p2++;
}
for(int i = 0; i < help.length; i++){
arr[L+i] = help[i];
}
}
//主方法
public static void main(String[] args){
int[] arr = {1,3,2,6,3,8,5};
mergesort(arr);
System.out.println(Arrays.toString(arr));
}
}
以上内容为个人学习总结,如有错误,欢迎指正。