归并排序 Java

归并排序是 前面特别慢, 忽然起速就特别快,然后就完了。是不是像什么

/**
 * Created by fupeng on 2017/1/20.
 */
public class merge {
    static void show(int [] a){
        for(int i : a){
            System.out.println(i);
        }
    }

    static void exch(int [] a, int i, int j){
        int t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
    static void merge(int []a, int i, int mid ,int j){
        int s1 = i, e1 = mid;
        int s2 = mid+1, e2 = j;
        int [] b = new int [a.length];
        int tmp = 0;

        while(s1<=e1 && s2<=e2){
            if(a[s1] < a[s2]){
                b[tmp++] = a[s1++];
            }else{
                b[tmp++] = a[s2++];
            }
        }
        while(s1<=e1)
            b[tmp++] = a[s1++];
        while(s2<=e2)
            b[tmp++] = a[s2++];

        for(int o = 0; o < tmp; o++){
            a[i+o] = b[o];
        }

    }

    static void div(int [] a, int i, int j){
        if(i>=j){
            return;
        }
        int mid = i + (j-i)/2;
        div(a,i,mid);
        div(a,mid+1,j);
        merge(a,i,mid,j);

    }
    static void sort(int [] a){
        div(a, 0, a.length-1);
    }

    public static void main(String[] args) {
        int [] a = {2,3,4,1,5,9,8,6,7,0};
        sort(a);
        show(a);

    }
}

归并排序的代码 看起来比较啰嗦, 其实它一直在分解问题,把问题分解成最小的问题,然后通过解决一大堆小问题,最终完成一个大问题。
农村包围城市的战略。

好的,以下是归并排序Java代码实现: ```java public class MergeSort { public static void mergeSort(int[] arr, int left, int right) { if (left >= right) { return; } int mid = (left + right) / 2; mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right); merge(arr, left, mid, right); } public static void merge(int[] arr, int left, int mid, int right) { int[] temp = new int[right - left + 1]; int i = left, j = mid + 1, k = 0; while (i <= mid && j <= right) { if (arr[i] <= arr[j]) { temp[k++] = arr[i++]; } else { temp[k++] = arr[j++]; } } while (i <= mid) { temp[k++] = arr[i++]; } while (j <= right) { temp[k++] = arr[j++]; } for (int p = 0; p < temp.length; p++) { arr[left + p] = temp[p]; } } public static void main(String[] args) { int[] arr = {5, 1, 6, 3, 4, 2}; mergeSort(arr, 0, arr.length - 1); for (int i : arr) { System.out.print(i + " "); } } } ``` 归并排序的基本思想是将待排序的序列分成两部分,分别对两部分进行排序,然后将两部分合并成一个有序序列。在合并过程,需要使用一个临时数组来存储合并结果。 具体实现过程,首先找到待排序序列的间位置,然后递归地对左半部分和右半部分进行排序,最后将左半部分和右半部分合并成一个有序序列。合并过程使用两个指针分别指向左半部分和右半部分的起始位置,比较两个指针所指的元素大小,将较小的元素存入临时数组,并移动指针。最后将临时数组的元素复制回原数组。 以上是归并排序Java代码实现,希望能够帮助到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值