zoukankan      html  css  js  c++  java
  • 归并排序

    归并排序

    思路

    1.归并排序采用了分而治之的策略
    2.首先向将整个序列两两划分,在递归地分别对这个序列的左边和右边两两划分,这样直到最小序列为单个元素
    3.之后再序列与序列之间两两归并成有序的序列,直到整个序列有序

    示意图

    拆分序列

    合并相邻有序的子序列

    转载自https://www.cnblogs.com/chengxiao/p/6194356.html

    代码实现

    package sort;
    
    import java.util.Arrays;
    
    public class MergeSort {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int[] a= {10,9,8,7,6,5,4,3,2,1};
    		int[] result=new int[a.length];
    		System.out.println(Arrays.toString(a));
    		mergeSort(a, result, 0, a.length-1);
    		System.out.println(Arrays.toString(a));
    		
    		
    
    	}
    	
    	public static void mergeSort(int[] a,int[] result,int start,int end)
    	{
    		if(start>=end)
    		{
    			return;
    		}
    		int len=end-start;//长度
    		int mid=(len>>1)+start;//中点
    		int start1=start;//前半段的起始
    		int end1=mid;//前半段的终点
    		int start2=mid+1;//前半段的开始
    		int end2=end;//后半段的结尾
    		mergeSort(a, result, start1, end1);
    		mergeSort(a, result, start2, end2);
    		int k=start;
    		while(start1<=end1&&start2<=end2)//两个有序序列进行归并
    		{
    			result[k++]=a[start1]<a[start2]?a[start1++]:a[start2++];
    		}
    		while(start1<=end1)//剩下的放到归并结果中
    		{
    			result[k++]=a[start1++];
    		}
    		while(start2<end2)//剩下的放到结果中
    		{
    			result[k++]=a[start2++];
    		}
    		for(k=start;k<=end;k++)//把结果一一赋值给原来的数组
    		{
    			a[k]=result[k];
    		}
    	}
    
    }
    
    

    总结

    • 归并排序是稳定排序
    • 它也是一种十分高效的排序,能利用完全二叉树特性的排序一般性能都不会太差。
    • java中Arrays.sort()采用了一种名为TimSort的排序算法,就是归并排序的优化版本。
    • 从上文的图中可看出,每次合并操作的平均时间复杂度为O(n),而完全二叉树的深度为|log2n|。总的平均时间复杂度为O(nlogn)。而且,归并排序的最好,最坏,平均时间复杂度均为O(nlogn)。
  • 相关阅读:
    HTML当中特殊字符的表示
    溢出文本用“...”代替
    【转】图标字体化浅谈
    字体在网页中画ICON图标
    图片轮播
    js获取网页屏幕可视区域高度
    MVC入口程序 | 简单调用及实例化
    初学者对于MVC架构模式学习与理解
    PHP初学习笔记(2015/4/8)
    linux常用20命令 --转载
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11716094.html
Copyright © 2011-2022 走看看