归并排序(java,python)

Python:

  1. 方法一:
    # 归并排序
    def merge(left, right):
        c = []
        j = h = 0
        while j < len(left) and h < len(right):
            if left[j] < right[h]:
                c.append(left[j])
                j += 1
            else:
                c.append(right[h])
                h += 1
        if j == len(left):
            for i in right[h:]:
                c.append(i)
        else:
            for i in left[j:]:
                c.append(i)
        return c
    
    
    def merge_sort(lists):
        if len(lists) <= 1:
            return lists
        middle = len(lists) / 2
        left = merge_sort(lists[:middle])
        right = merge_sort(lists[middle:])
        return merge(left, right)
        

     

  2. 方法二:
    #归并排序
    def merge(L, start, mid, end):
        i = start
        j = mid + 1
        tmp = []
        while (i <= mid) and (j <= end):
            if L[i] < L[j]:
                tmp.append(L[i])
                i += 1
            else:
                tmp.append(L[j])
                j += 1
        while i <= mid:
            tmp.append(L[i])
            i += 1
        while j <= end:
            tmp.append(L[j])
            j += 1
        for x in range(len(tmp)):
            L[x + start] = tmp[x]
            
            
    def merge_sort(L, start, end):
        mid = int((start + end) / 2)
        if start < end:
            merge_sort(L, start, mid)
            merge_sort(L, mid + 1, end)
            merge(L, start, mid, end)
        return L
         

     

Java:

//归并排序{33, 2, 46, 84, 5};
private static int[] mergeSort(int[] L, int low, int high) {
    int mid = (low + high) / 2;
    if (low < high) {
        mergeSort(L, low, mid);
        mergeSort(L, mid + 1, high);
        merge(L, low, mid, high);
    }
    return L;
}

private static void merge(int[] L, int low, int mid, int high) {
    int[] temp = new int[high - low + 1];
    int i = low;
    int j = mid + 1;
    int k = 0;
    while (i <= mid && j <= high) {
        if (L[i] < L[j]) {
            temp[k++] = L[i++];
        } else {
            temp[k++] = L[j++];
        }
    }
    while (i <= mid) temp[k++] = L[i++];
    while (j <= high) temp[k++] = L[j++];
    for (int x = 0; x < temp.length; x++) L[x + low] = temp[x];
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值