归并排序

分析:

将一个数组拆成两个数组分别进行排序,然后将两个排序好的数组进行合并。

JAVA代码实现:

public class Main {
   
    public static void main(String[] args) {
        int[] arr = new int[100];
        for(int i=0;i<100;i++) {
            arr[i] = (int) (Math.random() * 100);
        }
        sort(arr);
        for(int i=0;i<100;i++){
            System.out.println(arr[i]);
        }
    }
    
    public static void sort(int[] arr) {
        sort(arr, 0, arr.length-1);
    }
    
    //对数组中的[start, end]进行排序
    private static void sort(int[] arr, int begin, int end) {
        if(begin >= end) { //边界
            return;
        }
        int half = (begin + end) /2;
        //先排序左边
        sort(arr, begin, half);
        //再排序右边
        sort(arr, half+1, end);
        merge(arr, begin, half, end);
    }
    
    private static void merge(int[] arr, int begin, int half ,int end) {
        int[] cache = new int[end - begin + 1];
        int k = 0;
        int l = begin;
        int r = half+1;
        while(l <= half && r <= end) {
            if(arr[l] <= arr[r]) {
                cache[k++] = arr[l++];
            }
            else{
                cache[k++] = arr[r++];
            }
        }
        while(l<=half){
            cache[k++] = arr[l++];
        }
        while(r<=end){
            cache[k++] = arr[r++];
        }
        for(int i=begin;i<=end;i++){
            arr[i] = cache[i-begin];
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 声明:算法和数据结构的文章均是作者从github上翻译过来,为方便大家阅读。如果英语阅读能力强的朋友,可以直接到s...
    UnsanYL阅读 1,619评论 0 2
  • 序言 上一篇文章我们已经讲完了插入排序,也就是说我的On^2 的算法基本就写完了,当然还有别的On^2 的算法,但...
    再见远洋阅读 1,689评论 0 3
  • 数据结构与算法--归并排序 归并排序 归并排序基于一种称为“归并”的简单操作。比如考试可能会分年级排名和班级排名,...
    sunhaiyu阅读 916评论 0 6
  • Q:什么是归并排序?A:它是建立在归并操作上的一种有效的排序算法;是采用分治法的一个非常典型的应用;是一种稳定的 ...
    TinyDolphin阅读 2,980评论 5 4
  • 这是一个信息、知识爆炸的年代,我们每天背负的信息或知识量实在太多了! 各种书籍,各种订阅号,各种课程是否已经满天满...
    毅点收获阅读 877评论 3 10