锁五龙 2017-07-08 00:53 采纳率: 0%
浏览 2533

归并排序递归调用的流程理解

 static void mergearray(int[] a , int first , int mid , int last , int temp[]){
        System.out.println(first+"-"+ mid +"-"+last);
        int i = first , j = mid+1;
        int m = mid , n = last;
        int k = 0 ;

        while(i<=m && j <= n){
            if(a[i] <= a[j]){
                temp[k++] = a[i++];
            }else{
                temp[k++] = a[j++];
            }
        }

        while(i <= m){
            temp[k++] = a[i++];
        }

        while(j <= n ){
            temp[k++] = a[j++];
        }

        for( i = 0 ; i < k ; i++){
            a[first+ i] = temp[i];
        }
    }
    static int count = 0;
    static void mergesort(int a[] , int first , int last , int temp[]){
        if(first < last){
            System.out.println( first + " - " + last);
            int mid = (first + last) / 2;
            mergesort(a, first, mid, temp);
            mergesort(a, mid+1, last, temp);
            mergearray(a, first, mid, last, temp);
        }
    }

    public static void main(String[] args) {


        int[] arr = {10,4,6,3,8,2,5,7};
        int[] temp = new int[arr.length];
        mergesort(arr, 0, arr.length-1, temp);
        for (int i : temp) {
            System.out.println(i);
        }
    }

这是一段归并排序,下面的代码, 其中对数组左边拆解,右边拆解,然后排序那段的执行流程不太理解。 当递归调用左边拆解结束后如何继续执行?递归是用栈来实现,如何用栈来理解这段代码?

static void mergesort(int a[] , int first , int last , int temp[]){
if(first < last){
System.out.println( first + " - " + last);
int mid = (first + last) / 2;
mergesort(a, first, mid, temp);
mergesort(a, mid+1, last, temp);
mergearray(a, first, mid, last, temp);
}
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2017-07-08 15:56
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 用PLC设计纸袋糊底机送料系统
  • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 github训练的模型参数无法下载
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页