归并排序(Java实现)

基本思想

      归并排序,是创建在归并操作上的一种有效的排序算法。归并排序算法思想是建立在分治法之上的,思路简单,时间复杂度不会过于复杂,主要适用于总体无序,但子序列相对有序的情况。

基本步骤

      归并排序既可以采用递归思想,也可以采用迭代思想,无论采用哪种思想,其大致都可以分为三大步骤:

  • 分解序列:将序列进行二分
  • 序列排序:将二分后的各个子序列进行排序
  • 序列排序:合并各个子序列

算法图示(递归)

在这里插入图片描述

Java递归代码:

class Solution {
    private void  mergeSort(int start,int end,int[]arr) {
         if(start>=end){
             return;
         }
         int mid=(start+end)/2;
         int left=start;
         int right=mid+1;
         
         //将序列二分成子序列
         mergeSort(start,mid,arr);
         mergeSort(mid+1,end,arr);
         
         //开辟一段数组存储子序列排序后的结果
         int []sort=new int[end-start+1];
         int i=0;
         
         //进行排序,将子序列已排好序的左右两部分序列合并
         while(left<=mid||right<=end){
             if(left>mid){
                 sort[i++]=arr[right++];
             }else if(right>end){
                 sort[i++]=arr[left++];
             }else{
                 if(arr[left]<arr[right]){
                     sort[i++]=arr[left];
                     left++;
                 }else{
                     sort[i++]=arr[right];
                     right++;
                 }
             }
         }
         
         //序列覆盖
        if (sort.length >= 0) System.arraycopy(sort, 0, arr, start, sort.length);
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值