僧一行

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1归并排序呢是一种比较复杂的排序算法,其主要体现在拆分与归并中。而排序的基本思想是在归并中排序迭代完成
主要代码如下:

public class MergeRealize {
    public static int[] assist;
        /*
    算法实现 
     */
    //归并排序算法

    public void sortMerge(int[] arr){

        assist = new int[arr.length];
        int low = 0;
        int high = arr.length-1;
        splitInteract(arr,low,high);
    }
    //此方法通过迭代 拆分数组
    public static void splitInteract(int[] arr,int low,int high){
        if (high <= low){
            return;//分成最小
        }
        int mid = low + (high - low) / 2;
        splitInteract(arr,low,mid);
        splitInteract(arr,mid+1,high);
        //以上是不断切分得过程 知道数组被切分为一个数
        //核心就是归并 归并的时候排序
        //定义两个指针 分别指向 两个子数组的头结点  比较 将小的放入数组中  顺序为先排号左边的然后排序好右边的
        //最后合并为一个数组
        mergeInteractor(arr,low,mid,high);

    }
    public static void mergeInteractor(int[] arr,int low,int mid ,int high) {

        int i = low;
        int p1  =  low;
        int p2 = mid+1;
        //此时 就需要比较 point1 与 point2 处的值 比较完了之后 将另以数组直接排到后面
        while(p1<=mid && p2<=high) {
            if (arr[p1]>=arr[p2]) {
                assist[i++] = arr[p2++];
            }else {
                assist[i++] = arr[p1++];
            }
        }
        //上面循环完了之后 肯定会有一个数组剩余的没有排进去 指针走到头了 循环遍历完事OK
        while(p1<=mid){
            assist[i++] = arr[p1++];
        }
        while (p2<=high){
            assist[i++] = arr[p2++];
        }
        System.out.println(Arrays.toString(assist));
        for(int in = low;in<=high;in++){
            arr[in] = assist[in];
        }
    }
    @Test
    public void testsortMerge(){
        int[] arr = {5,2,7,9,34,2,1,5,7};
        sortMerge(arr);
//
    }
}
posted on 2021-09-21 20:27  僧一行  阅读(40)  评论(0)    收藏  举报