zoukankan      html  css  js  c++  java
  • 非递归实现归并排序

    思想:利用的还是分治思想,只不过这次我们把数组以2的倍数划分,然后进行两两合并,划分代码如下:

    public static void merge(int[] arr){
            for(int i = 1;i<arr.length;i *= 2){
                mergeSort(arr,i);
            }
        }

    合并代码如下:

    public static void mergeSort(int[] arr, int gap) {
            int[] tmp = new int[arr.length];
            int index = 0;
            int start1 = 0;
            int end1 = start1 + gap - 1;
            int start2 = end1 + 1;
            int end2 = (start2 + gap - 1)>=arr.length?arr.length-1:start2+gap-1;
            while(start2<arr.length){
                while(start1<=end1&&start2<=end2){
                    if(arr[start1]<arr[start2]){
                        tmp[index++] = arr[start1++];
                    }else{
                        tmp[index++] = arr[start2++];
                    }
                }
                while(start1<=end1){
                    tmp[index++] = arr[start1++];
                }
                while(start2<=end2){
                    tmp[index++] = arr[start2++];
                }
                start1 = end2+1;
                end1 = start1 + gap - 1;
                start2 = end1 + 1;
                end2 = (start2 + gap - 1)>=arr.length?arr.length-1:start2+gap-1;
            }
            while(start1<arr.length){
                tmp[index++] = arr[start1++];
            }
            for(int j = 0;j<tmp.length;j++){
                arr[j] = tmp[j];
            }
    
        }
  • 相关阅读:
    BZOJ 1452 Count(二维树状数组)
    BZOJ 1407 Savage(拓展欧几里得)
    BZOJ 1415 聪聪和可可(期望DP)
    BZOJ 1406 密码箱(数论)
    最大流小结
    UVA6531Go up the ultras
    二分图小结
    Codeforces Round #243 (Div. 1)
    图论模板集合
    zoj3416 Balanced Number
  • 原文地址:https://www.cnblogs.com/du001011/p/11160875.html
Copyright © 2011-2022 走看看