合并排序

package cn.cnooc.algorithm;
/**
 * 归并排序
 * @author 选自《数据结构与算法分析 Java语言描述》 Mark Allen Weiss
 *
 */
public class MergeSort {
 /**
  * MergeSort Algorithm
  * @param <AnyType>
  * @param a an array of Comparable items
  */
    @SuppressWarnings({ "unchecked" })
 private static <AnyType extends Comparable<? super AnyType>> void mergeSort(AnyType[] a){
     AnyType[] tempArray = (AnyType[])new Comparable[a.length];
     mergeSort(a,tempArray,0,a.length-1);
    }
    /**
     * Internal method that makes recursive calls
     * @param <AnyType>
     * @param a an array of Comparable items
     * @param tempArray an array to place the merged result
     * @param left the left-most index of the subarray
     * @param right the right-most index of the subarray
     */
    private static <AnyType extends Comparable<? super AnyType>> void mergeSort(AnyType[] a,AnyType[] tempArray,int left,int right){
     if(left < right){
      int center = ( left + right ) / 2;
      mergeSort(a,tempArray,left,center);
      mergeSort(a,tempArray,center+1,right);
      merge(a,tempArray,left,center+1,right);
     }
    }
    /**
     * Internal method that merges two sorted  halves of a subarray
     * @param <AnyType>
     * @param a an array of Comparable items
     * @param tempArray an array to place the merged result
     * @param leftPos  the left-most index of the subarray
     * @param rightPos the index of start of the second harf
     * @param rightEnd right the right-most index of the subarray
     */
    private static <AnyType extends Comparable<? super AnyType>> void merge(AnyType[] a,AnyType[] tempArray,int leftPos,int rightPos,int rightEnd){
     int leftEnd = rightPos -1;
     int tempPos = leftPos;
     int numElements = rightEnd - leftPos + 1;
     //Main loop
     while(leftPos <= leftEnd && rightPos <= rightEnd){
      if(a[leftPos].compareTo(a[rightPos]) <=0 ){
       tempArray[tempPos++] = a[leftPos++];
      }else{
       tempArray[tempPos++] = a[rightPos++];
      }
     }
     while(leftPos <= leftEnd){
      tempArray[tempPos++] = a[leftPos++];
     }
     while(rightPos <= rightEnd){
      tempArray[tempPos++] = a[rightPos++];
     }
     //Copy tempArray back
     for(int i = 0;i<numElements;i++,rightEnd--){
      a[rightEnd] = tempArray[rightEnd];
     }
    }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
      Integer intArray [] = {13,192,32,24,24,53};
      mergeSort(intArray);
      for(int i: intArray){
       System.out.print(i+"/t");
      }
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值