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

    1、基本思想

      归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

    2、代码示例

    package sort;
    
    /**
     * 归并排序 
     */
    public class MergingSort {
    
        public void TestSort(){  
            int a[]={49,38,65,97,76,98,54,56,17,18,23,34,15,35,25,53,51};  
            sort(a,0,a.length-1);  
            for(int i=0;i<a.length;i++){  
                System.out.print(a[i]+" ");  
            }
        }  
        public void sort(int[] arr, int left, int right) {  
            if(left<right){  
                //找出中间索引  
                int center=(left+right)/2;  
                //对左边数组进行递归  
                sort(arr,left,center);  
                //对右边数组进行递归  
                sort(arr,center+1,right);  
                //合并  
                merge(arr,left,center,right);  
            } 
                
        }  
        public void merge(int[] arr, int left, int center, int right) {  
            int [] tmpArr=new int[arr.length];  
            int mid=center+1;  
            //third记录中间数组的索引  
            int third=left;  
            int tmp=left;  
            while(left<=center&&mid<=right){  
          
           //从两个数组中取出最小的放入中间数组  
                if(arr[left]<=arr[mid]){  
                    tmpArr[third++]=arr[left++];  
                }else{  
                    tmpArr[third++]=arr[mid++];  
                }  
            }  
            //剩余部分依次放入中间数组  
            while(mid<=right){  
                tmpArr[third++]=arr[mid++];  
            }  
            while(left<=center){  
                tmpArr[third++]=arr[left++];  
            }  
            //将中间数组中的内容复制回原数组  
            while(tmp<=right){  
                arr[tmp]=tmpArr[tmp++];  
            }  
        }  
          
    }

    3、效率分析

  • 相关阅读:
    adb 连接时候不弹出授权对话框【转】
    Android设备adb授权的原理【转】
    JDK-Logger
    使用xpath时出现noDefClass的错误(找不到某个类)
    Netty系列之Netty 服务端创建
    windows 如何查看端口占用情况?
    解决Apache/PHP无法启动的问题
    多个mysql解决方法
    Qt 静态编译后的exe太大, 可以这样压缩.
    烈焰SWF解密
  • 原文地址:https://www.cnblogs.com/hehaiyang/p/4758044.html
Copyright © 2011-2022 走看看