《排序算法》系列 -淺顯易懂的認識---歸併排序

前言

終於快要把幾中排序算法看完了,雖然還不是太懂,但是自己也知道了其中的實現原理,或許在實現方便自己還會有問題,但是以後用在項目中就能熟能生巧了。
在這裏插入圖片描述
所以在以後遇到通過排序算法去實現的功能,自己也要學以致用了!

好了言歸正傳,開始上代碼:

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));
    }
}

依然是老樣子,自己的理解是寫在代碼中的,可以通過閱讀代碼來看實現的邏輯。

當然了自己的理解也可能有不正確的地方,也希望能給予指正,共同學習!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章