归并排序及java实现

来源:互联网 发布:今晚非农数据预测 编辑:程序博客网 时间:2024/06/05 19:10

思路:

1.分为两段分别进行段内排序
(0,8)
 
(0,4)(5,8)
 
(0,2)(3,4)(5,6)(7,8)
 
(0,1)
2.合并,进行段间排序
这里写图片描述

java实现

public class MergeSort {    private static int [] nums = {5,9,8,7,1,2,4,3,6};    public static void main(String[] args) {        // TODO Auto-generated method stub        if(nums.length <= 0)            return ;        mergeSort(nums, 0, nums.length - 1);        for(int i = 0; i < nums.length; i ++)        {            System.out.print(nums[i] + " ");        }       }    public static void mergeSort(int [] data, int l, int r){        //递归终止条件        if(l >= r)            return;        int mid = l + (r - l)/2;        mergeSort(nums, l, mid);        mergeSort(nums, mid + 1, r);        merge(nums, l, mid, r);    }    public static void merge(int [] data, int l, int mid, int r){        int [] temp = new int[data.length];        int i = l, j = mid + 1, k = 0;        while(i <= mid && j <= r)        {            if(data[i] <= data[j]){                temp[k ++] = data[i ++];            }else {                temp[k ++] = data[j ++];            }           }        while(i <= mid)        {            temp[k ++] = data[i ++];        }        while(j <= r)        {            temp[k ++] = data[j ++];        }        //搬回去        for(int ii = 0; ii < k; ii ++){            data[l + ii] = temp[ii];        }    }}
原创粉丝点击