前言
終於快要把幾中排序算法看完了,雖然還不是太懂,但是自己也知道了其中的實現原理,或許在實現方便自己還會有問題,但是以後用在項目中就能熟能生巧了。
所以在以後遇到通過排序算法去實現的功能,自己也要學以致用了!
好了言歸正傳,開始上代碼:
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));
}
}
依然是老樣子,自己的理解是寫在代碼中的,可以通過閱讀代碼來看實現的邏輯。
當然了自己的理解也可能有不正確的地方,也希望能給予指正,共同學習!