java排序--归并排序

在这里插入图片描述

归并排序的基本思想是:
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有 序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

归并排序基本步骤图解

在这里插入图片描述

归并排序的特性:

1丶时间复杂度:O(N*logN)
2丶空间复杂度:O(N)
3丶稳定性:稳定

下面是代码实现:

public static void merge(int[] array,int start,int mid,int end){
        int[] tempArray = new int[array.length];
        int tempIndex = start;

        int start2 = mid+1;
        int i = start;
        //两个归并段都有数据的时候
        while(start <= mid && start2 <= end){
            if(array[start] <= array[start2]){
                tempArray[tempIndex++] = array[start++];
            }else{
                tempArray[tempIndex++] = array[start2++];
            }
        }
        while(start <= mid){
            tempArray[tempIndex++] = array[start++];
        }
        while (start2 <= end){
            tempArray[tempIndex++] = array[start2++];
        }

        while (i <= end){
            array[i] = tempArray[i];
            i++;
        }
        System.out.println(Arrays.toString(array));

    }

    //归并排序
    public static void mergeSort(int[] array,int start,int end ){
        if(start >= end){
            return;
        }
        int mid = (start+end)/2;
        mergeSort(array,start,mid);//递归左边
        mergeSort(array,mid+1,end);//递归右边A
        //肯定是一个一个的有序序列

        merge(array,start,mid,end);
    }

测试类代码:

        int[] array = {10,6,7,1,3,9,4,2};
        mergeSort(array,0,array.length-1);
        System.out.println(Arrays.toString(array));

下面是运行结果:

在这里插入图片描述

以上就是几种比较基础并且非常重要的排序。

除此之外,还有比较特殊的排序,比如不需要比较的计数排序,还有变魔术一般的基数排序,通过入桶和出桶进行排序。

下面是几种基础排序的特性总结:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值