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、效率分析

  • 相关阅读:
    [算法] 带权图
    哥德巴赫猜想 ——— 极限算法(你要是能写出比我用时还短的代码算我输)
    详解 位运算
    内存对齐模式 —— 原理讲解
    C语言 文件操作
    指针与数组
    队列的实现
    堆栈的实现
    线性表 详讲及使用
    树莓派
  • 原文地址:https://www.cnblogs.com/hehaiyang/p/4758044.html
Copyright © 2011-2022 走看看