码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序

时间:2018-05-20 15:31:30      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:原来   时间   空间   merge   复杂度   .com   height   art   lse   

//归并排序
//是一种稳定的排序方法
//时间复杂度为nlog2(n)
//空间复杂度为O(n) package mergesort; import java.util.Arrays; public class TestMergeSort { //归并排序 public static void mergeSort(int[]array) { //遍历序列 产生每归并段1个数 2个数 4个数 for(int i = 1;i < array.length;i = i*2) { merge(array,i); } } public static void merge(int[]array,int gap) {//gap为每个归并段的个数 int start1 = 0; int end1 = start1+gap-1; int start2 = end1+1; int end2 = start2+gap-1 < array.length-1 ? start2+gap-1:array.length-1; //进行排序 int[]brray = new int [array.length]; int i = 0; while(start2<array.length){//肯定有两个归并段 while(start1 <= end1 && start2 <= end2){//两个归并段是否都有数据 if(array[start1]<array[start2]){ brray[i++]=array[start1++]; }else{ brray[i++]=array[start2++]; } } while(start1<=end1){//没有第二个归并段了 brray[i++]=array[start1++]; } while(start2<=end2){//第一个归并段都放到brray了 brray[i++]=array[start2++]; } //重新归位 赶下一个归并段 start1=end2+1; end1=start1+gap-1; start2=end1+1; end2= start2+gap-1 < array.length-1 ? start2+gap-1:array.length-1; } //剩下的start1和end1之间的的数据都放到brray中 while(start1 < array.length){ brray[i++]=array[start1++]; } //将已经有序的中间数组(tmp)的数据放回原来的数组中 for(int j = 0;j < brray.length;j++){ array[j]=brray[j]; } } public static void main(String[] args) { int[]array={11,17,23,12,3,35,7}; mergeSort(array); System.out.println(Arrays.toString(array)); } }

技术分享图片技术分享图片

归并排序

标签:原来   时间   空间   merge   复杂度   .com   height   art   lse   

原文地址:https://www.cnblogs.com/ioio2/p/9063217.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!