归并排序法

算法之归并排序法

之前觉得这个很难,后来看了一些博客,理解了之后总算是懂了。算是之前的补充。(并且今天笔试有排序算法,正好做个记录,加深映象)。
归并排序的核心是分而治之,先分开,再两两合并,合并的时候调整顺序。
例如 待排序序列
4 8 5 3 9 6 2 4
第一次分 4 8 5 3 | 9 6 2 4
第二次分 4 8 | 5 3 | 9 6 | 2 4
第三次分 4 |8 | 5 | 3 | 9| 6 | 2 | 4 (此时序列有序)
合并 4 8 | 3 5 | 6 9| 2 4
3 4 5 8 | 2 4 6 9
2 3 4 5 6 8 9
在48与35合并的时候 4 与3 比较,将3放在前面,4和5比较,4放在前面,8和5比较,5,最后是8 ,后面也是一样的,最终有序。
核心代码如下

 //合并数
    public static void merge(int[] list,int low ,int high){
        int[] temp = new int[high-low+1];
        int mid = (low+high)/2;
        int i=low,j=mid+1,k=0;
        //将数按顺序放入temp
        while (i<=mid&&j<=high){
            if (list[i]<list[j]){

                temp[k++] = list[i++];
            }
            else {
                temp[k++] = list[j++];
            }
        }
        //比后面所有数都大的数
        while (i<=mid){
            temp[k++] = list[i++];
        }
        //比前面所有数都大的数
        while (j<=high){
            temp[k++] = list[j++];
        }
        //放入list中
        k=0;
        for (i=low;i<=high;i++,k++){
            list[i] = temp[k];
        }
    }
 //归并排序
    public static void mergeSort(int[] list, int low, int high) {
        if (low < high) {
            int middle = (low + high) / 2;
            mergeSort(list, low, middle);
            mergeSort(list, middle + 1, high);
            merge(list, low, high);
        }
    }

代码已经上传至 https://gitee.com/zhoujie1/studyTest.git
顺便作为之前排序算法的补充。
参考博客 https://blog.csdn.net/dainandainan1/article/details/77851400

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值