博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
归并排序
阅读量:4060 次
发布时间:2019-05-25

本文共 1908 字,大约阅读时间需要 6 分钟。

package Sort;public class CombineSort {    /**     * 二路归并排序的核心是让两个有序数组合并为数组     * 二路归并排序的两个有序数组是相邻的     * 二路归并排序必须要先创建一个数组放置排完序的数组,然后再复制回去     */     public static void TwoRoadCombine(int[] array, int start, int middle, int end){         int[] tmpArray = new int[end - start + 1];         int leftPointer = start, rightPointer = middle;         int index = 0;//新数组的下标         while(leftPointer < middle && rightPointer <= end){             if(array[leftPointer] <= array[rightPointer]){                 tmpArray[index++] = array[leftPointer++];             }else{                 tmpArray[index++] = array[rightPointer++];             }         }         while(leftPointer < middle){             tmpArray[index++] = array[leftPointer++];         }         while(rightPointer <= end){             tmpArray[index++] = array[rightPointer++];         }         System.arraycopy(tmpArray,0,array,start,tmpArray.length);     }    /**     * 归并排序是先排2个元素,再排四个元素,再排8个     * 如果子数组的个数是单数个,最后一个不参与排序     * 而且要注意最后一组子数组元素个数较小的情况。     * @param     */    public static void oneTimeSort(int[] array, int length){//length是有序子数组的长度        int count = array.length/length;//count是有序数组的数量        int i = 0;        for(i = 0; i < count/2; i++){//count/2是有序数组的成组数            TwoRoadCombine(array, 2*i*length,(2*i+1)*length,(2*i+2)*length-1);        }        if(count%2 == 1 && array.length%length != 0){//如果说count是个奇数,而且这个数组长度不是有序数组程度的整数倍            TwoRoadCombine(array,2*i*length,(2*i+1)*length,array.length - 1);        }    }    /**     * 接下来就是归并排序算法     * @param     */    public static void combineSort(int[] array){        int length = 1;        for(length = 1; length < array.length; length = length*2){            oneTimeSort(array,length);        }    }    public static void main(String[] args){         int[] array = {2,1,3,8,323,32,542,23,4524};         combineSort(array);         ArrayPrint.arrayPrint(array);     }}

 

转载地址:http://vizji.baihongyu.com/

你可能感兴趣的文章
大数据入门:Zookeeper结构体系
查看>>
大数据入门:Spark RDD基础概念
查看>>
大数据入门:SparkCore开发调优原则
查看>>
大数据入门:Java和Scala编程对比
查看>>
大数据入门:Scala函数式编程
查看>>
C++报错:引发了未经处理的异常:写入访问权限冲突, p 是 0xCCCCCCCC
查看>>
【数据结构周周练】002顺序表与链表
查看>>
C++报错:C4700:使用了非初始化的局部变量
查看>>
【数据结构周周练】003顺序栈与链栈
查看>>
【数据结构周周练】006队列基本操作-顺序结构及链式结构实现
查看>>
C++类、结构体、函数、变量等命名规则详解
查看>>
C++ goto语句详解
查看>>
【数据结构周周练】008 二叉树的链式创建及测试
查看>>
《算法分析与设计》 第七章 贪心法 基本知识点整理
查看>>
贪心法求解背包问题 C++
查看>>
贪心法求解TSP问题 C++
查看>>
《软件体系结构》 第四章 软件体系结构描述
查看>>
《软件体系结构》第六章 Web服务体系结构
查看>>
《软件体系结构》 第七章 基于体系结构的软件开发
查看>>
《软件体系结构》 第九章 软件体系结构评估
查看>>