前言
终于快要把几中排序算法看完了,虽然还不是太懂,但是自己也知道了其中的实现原理,或许在实现方便自己还会有问题,但是以后用在项目中就能熟能生巧了。
所以在以后遇到通过排序算法去实现的功能,自己也要学以致用了!
好了言归正传,开始上代码:
import java.util.Arrays;
/**
* @author Administrator
*
* 在归并排序中,归并排序的思想是对数组进行拆分再合并的思想
* 首先将数组进行拆分两份
* 将拆分的数组再进行拆分,在进行拆分时通过递归的思想进行层层拆分,直到拆分到最小
* 将最小数组的值进行比较排序,然后再进行合并
* 将合并的数组最后合并成整个数组
* 此时数组就是已经排好序的数组
*/
public class mergeSort {
/**
* 分解数组操作
* @param array
* @return
*/
public int[] merge(int[] array){
if (array.length<2){
return array;
}
//获取数组中间值、取整
int mid = array.length/2;
//对数组进行拆分
int[] leftArray = Arrays.copyOfRange(array,0,mid);
int[] rightArray = Arrays.copyOfRange(array,mid,array.length);
//对数组进行拆分并合并,拆分时任然需要调用该方法,因此使用递归的思想进行拆分
return mergeSort(merge(leftArray),merge(rightArray));
}
/**
* 合并数组操作
* @param leftArray
* @param rightArray
*/
public int[] mergeSort(int[] leftArray,int[] rightArray){
//定义一个新的数组,用来存放合并的数组
int[] newArray = new int[leftArray.length+rightArray.length];
//定义两个数组的下标
int leftIndex = 0;
int rightIndex = 0;
for (int i = 0; i < newArray.length; i++) {
if (leftIndex>=leftArray.length){
newArray[i] = rightArray[rightIndex++];
}else if (rightIndex>=rightArray.length){
newArray[i] = leftArray[leftIndex++];
}else if (leftArray[leftIndex]<rightArray[rightIndex]){
newArray[i] = leftArray[leftIndex++];
}else {
newArray[i] = rightArray[rightIndex++];
}
}
return newArray;
}
public static void main(String[] args) {
mergeSort mergeSort = new mergeSort();
int[] arr = new int[5];
arr[0]=5;
arr[1]=2;
arr[2]=6;
arr[3]=9;
arr[4]=0;
System.out.println(Arrays.toString(arr));
arr = mergeSort.merge(arr);
System.out.println(Arrays.toString(arr));
}
}
依然是老样子,自己的理解是写在代码中的,可以通过阅读代码来看实现的逻辑。
当然了自己的理解也可能有不正确的地方,也希望能给予指正,共同学习!