排序算法(一):归并排序

归并排序

时间复杂度为:O(logn)

public void merge(int[] array,int left,int mid,int right){
        int [] arr = new int [right-left+1];
        int pos = 0; // 临时数组的位置
        // 直接选择排序
        int i = left;
        int j = mid+1;
        while(i<=mid && j<=right){
            if(array[i] <= array[j]){
                // 前面的小于后面的
                arr[pos++] = array[i++];
            }else{
                // 后面的小于前面的
                arr[pos++] = array[j++];
            }
        }
        // 将剩余的全部加到临时数组后面
        while(i<=mid){
            arr[pos++] = array[i++];
        }
        while(j<=right){
            arr[pos++] = array[j++];
        }
        // 用临时数组替换原数组
        for(int n = left;n<=right;n++){
            array[n] = arr[n-left];
        }
    }
	// 归并排序
    public void mergeSort(int left,int right, int [] array){
        if(left >= right) return;
        int mid = (left + right) / 2;
        mergeSort(left,mid,array);
        mergeSort(mid+1,right,array);   
        merge(array,left,mid,right);
    }

ps : 各个排序算法的时间复杂度

算法时间复杂度最好最坏稳定性空间
插入排序O(n^2)O(n)O(n^2)稳定
冒泡排序O(n^2)O(n)O(n^2)稳定
归并排序O(nlogn)O(nlogn)O(nlogn)稳定O(n)
堆排序O(nlogn)O(nlogn)O(nlogn)不稳定
快速排序O(nlogn)O(nlogn)O(n^2)不稳定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值