<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-48  評論-26  文章-0  trackbacks-0
    插入排序:
     
     package org.rut.util.algorithm.support;
     
    import org.rut.util.algorithm.SortUtil;

      
    public class InsertSort implements SortUtil.Sort{
          
    /* (non-Javadoc)
            * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
             
    */
            
    public void sort(int[] data) {
              
    int temp;
               
    for(int i=1;i<data.length;i++){
                   
    for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){
                      SortUtil.swap(data,j,j
    -1);
                   }
               }        
          }
       }
    冒泡排序:
      package org.rut.util.algorithm.support;
       
    import org.rut.util.algorithm.SortUtil;
       
        
    public class BubbleSort implements SortUtil.Sort{
            
    /* (non-Javadoc)
             * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
            
    */
         
    public void sort(int[] data) {
              
    int temp;
               
    for(int i=0;i<data.length;i++){
                   
    for(int j=data.length-1;j>i;j--){
                       
    if(data[j]<data[j-1]){
                           SortUtil.swap(data,j,j
    -1);
                       }
                  }
               }
           }
       }
    選擇排序:
    package org.rut.util.algorithm.support;
       
    import org.rut.util.algorithm.SortUtil;
      
       
    public class SelectionSort implements SortUtil.Sort {
           
    /*
           * (non-Javadoc)
            * 
             * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
            
    */
          
    public void sort(int[] data) {
               
    int temp;
               
    for (int i = 0; i < data.length; i++) {
                   
    int lowIndex = i;
                   
    for (int j = data.length - 1; j > i; j--) {
                       
    if (data[j] < data[lowIndex]) {
                           lowIndex 
    = j;
                       }
                   }
                  SortUtil.swap(data,i,lowIndex);
               }
          }
       }
    Shell排序:
     package org.rut.util.algorithm.support;
       
    import org.rut.util.algorithm.SortUtil;
      
        
    public class ShellSort implements SortUtil.Sort{
           
    /* (non-Javadoc)
           * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
             
    */
          
    public void sort(int[] data) {
              
    for(int i=data.length/2;i>2;i/=2){
                  
    for(int j=0;j<i;j++){
                       insertSort(data,j,i);
                   }
              }
               insertSort(data,
    0,1);
           }
           
    /**
            * 
    @param data
            * 
    @param j
            * 
    @param i
            
    */
          
    private void insertSort(int[] data, int start, int inc) {
               
    int temp;
               
    for(int i=start+inc;i<data.length;i+=inc){
                   
    for(int j=i;(j>=inc)&&(data[j]<data[j-inc]);j-=inc){
                       SortUtil.swap(data,j,j
    -inc);
                   }
               }
           }
       }
    快速排序:
     package org.rut.util.algorithm.support;
        
    import org.rut.util.algorithm.SortUtil;
       
        
    public class ImprovedQuickSort implements SortUtil.Sort {
           
    private static int  MAX_STACK_SIZE=4096;
           
    private static int THRESHOLD=10;
           
    /* (non-Javadoc)
             * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
             
    */
           
    public void sort(int[] data) {
               
    int[] stack=new int[MAX_STACK_SIZE];
               
               
    int top=-1;
               
    int pivot;
               
    int pivotIndex,l,r;
               
               stack[
    ++top]=0;
               stack[
    ++top]=data.length-1;
               
               
    while(top>0){
                   
    int j=stack[top--];
                  
    int i=stack[top--];
                   
                   pivotIndex
    =(i+j)/2;
                   pivot
    =data[pivotIndex];
                   
                   SortUtil.swap(data,pivotIndex,j);
                   
                   
    //partition
                   l=i-1;
                   r
    =j;
                   
    do{
                       
    while(data[++l]<pivot);
                       
    while((r!=0)&&(data[--r]>pivot));
                      SortUtil.swap(data,l,r);
                   }
                  
    while(l<r);
                   SortUtil.swap(data,l,r);
                  SortUtil.swap(data,l,j);
                   
                   
    if((l-i)>THRESHOLD){
                       stack[
    ++top]=i;
                       stack[
    ++top]=l-1;
                  }
                   
    if((j-l)>THRESHOLD){
                       stack[
    ++top]=l+1;
                      stack[
    ++top]=j;
                   }
                   
               }
               
    //new InsertSort().sort(data);
               insertSort(data);
          }
           
    /**
            * 
    @param data
            
    */
           
    private void insertSort(int[] data) {
               
    int temp;
               
    for(int i=1;i<data.length;i++){
                   
    for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){
                       SortUtil.swap(data,j,j
    -1);
                  }
               }       
           }
       }
    歸并排序:
      package org.rut.util.algorithm.support;
       
    import org.rut.util.algorithm.SortUtil;
       
        
    public class ImprovedMergeSort implements SortUtil.Sort {
            
    private static final int THRESHOLD = 10;
           
    /*
             * (non-Javadoc)
            * 
            * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
            
    */
           
    public void sort(int[] data) {
               
    int[] temp=new int[data.length];
               mergeSort(data,temp,
    0,data.length-1);
           }
           
    private void mergeSort(int[] data, int[] temp, int l, int r) {
               
    int i, j, k;
               
    int mid = (l + r) / 2;
               
    if (l == r)
                   
    return;
               
    if ((mid - l) >= THRESHOLD)
                   mergeSort(data, temp, l, mid);
               
    else
                   insertSort(data, l, mid 
    - l + 1);
               
    if ((r - mid) > THRESHOLD)
                   mergeSort(data, temp, mid 
    + 1, r);
               
    else
                   insertSort(data, mid 
    + 1, r - mid);
               
    for (i = l; i <= mid; i++) {
                  temp[i] 
    = data[i];
               }
               
    for (j = 1; j <= r - mid; j++) {
                  temp[r 
    - j + 1= data[j + mid];
               }
              
    int a = temp[l];
              
    int b = temp[r];
               
    for (i = l, j = r, k = l; k <= r; k++) {
                   
    if (a < b) {
                      data[k] 
    = temp[i++];
                       a 
    = temp[i];
                  } 
    else {
                       data[k] 
    = temp[j--];
                      b 
    = temp[j];
                  }
              }
          }
           
    /**
            * 
    @param data
            * 
    @param l
            * 
    @param i
           
    */
          
    private void insertSort(int[] data, int start, int len) {
               
    for(int i=start+1;i<start+len;i++){
                   
    for(int j=i;(j>start) && data[j]<data[j-1];j--){
                       SortUtil.swap(data,j,j
    -1);
                   }
               }
           }
       }
    堆排序:
     package org.rut.util.algorithm.support;
        
    import org.rut.util.algorithm.SortUtil;
       
       
    public class HeapSort implements SortUtil.Sort{
            
    /* (non-Javadoc)
            * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
            
    */
            
    public void sort(int[] data) {
               MaxHeap h
    =new MaxHeap();
              h.init(data);
               
    for(int i=0;i<data.length;i++)
                  h.remove();
               System.arraycopy(h.queue,
    1,data,0,data.length);
           }
      
            
    private static class MaxHeap{
                
              
               
    void init(int[] data){
                   
    this.queue=new int[data.length+1];
                  
    for(int i=0;i<data.length;i++){
                      queue[
    ++size]=data[i];
                      fixUp(size);
                   }
              }
                
               
    private int size=0;
               
    private int[] queue;
                       
               
    public int get() {
                   
    return queue[1];
               }
               
    public void remove() {
                   SortUtil.swap(queue,
    1,size--);
                   fixDown(
    1);
               }
               
    //fixdown
               private void fixDown(int k) {
                  
    int j;
                 
    while ((j = k << 1<= size) {
                       
    if (j < size && queue[j]<queue[j+1])
                           j
    ++
                       
    if (queue[k]>queue[j]) //不用交換
                           break;
                       SortUtil.swap(queue,j,k);
                       k 
    = j;
                   }
               }
               
    private void fixUp(int k) {
                   
    while (k > 1) {
                       
    int j = k >> 1;
                       
    if (queue[j]>queue[k])
                           
    break;
                      SortUtil.swap(queue,j,k);
                       k 
    = j;
                   }
              }
           }
      }
    SortUtil:
     package org.rut.util.algorithm;
        
    import org.rut.util.algorithm.support.BubbleSort;
       
    import org.rut.util.algorithm.support.HeapSort;
        
    import org.rut.util.algorithm.support.ImprovedMergeSort;
        
    import org.rut.util.algorithm.support.ImprovedQuickSort;
        
    import org.rut.util.algorithm.support.InsertSort;
        
    import org.rut.util.algorithm.support.MergeSort;
        
    import org.rut.util.algorithm.support.QuickSort;
        
    import org.rut.util.algorithm.support.SelectionSort;
       
    import org.rut.util.algorithm.support.ShellSort;
      
       
    public class SortUtil {
           
    public final static int INSERT = 1;
          
    public final static int BUBBLE = 2;
           
    public final static int SELECTION = 3;
          
    public final static int SHELL = 4;
           
    public final static int QUICK = 5;
           
    public final static int IMPROVED_QUICK = 6;
           
    public final static int MERGE = 7;
           
    public final static int IMPROVED_MERGE = 8;
           
    public final static int HEAP = 9;
           
    public static void sort(int[] data) {
               sort(data, IMPROVED_QUICK);
           }
           
    private static String[] name={
                   
    "insert","bubble","selection","shell","quick","improved_quick","merge","improved_merge","heap"
           };
          
          
    private static Sort[] impl=new Sort[]{
                  
    new InsertSort(),
                   
    new BubbleSort(),
                   
    new SelectionSort(),
                   
    new ShellSort(),
                   
    new QuickSort(),
                   
    new ImprovedQuickSort(),
                   
    new MergeSort(),
                 
    new ImprovedMergeSort(),
                   
    new HeapSort()
           };
          
    public static String toString(int algorithm){
               
    return name[algorithm-1];
           }
          
           
    public static void sort(int[] data, int algorithm) {
               impl[algorithm
    -1].sort(data);
         }
           
    public static interface Sort {
               
    public void sort(int[] data);
           }
          
    public static void swap(int[] data, int i, int j) {
               
    int temp = data[i];
               data[i] 
    = data[j];
               data[j] 
    = temp;
           }
       }




    文章來源:http://m.tkk7.com/NicholasEcho/archive/2008/10/31/237914.html
    posted on 2008-10-31 22:36 Worker 閱讀(77) 評論(0)  編輯  收藏 所屬分類: J2SE/J2EE

    主站蜘蛛池模板: 国产女高清在线看免费观看| 亚洲视频免费播放| 亚洲片国产一区一级在线观看| 亚洲av无码有乱码在线观看| 久久精品女人天堂AV免费观看| jlzzjlzz亚洲jzjzjz| 成人毛片免费视频| 婷婷国产偷v国产偷v亚洲| 亚洲 自拍 另类小说综合图区| 日本一区二区在线免费观看 | 狠狠久久永久免费观看| 亚洲日韩久久综合中文字幕| 免费毛片在线播放| 午夜在线亚洲男人午在线| 亚洲日韩在线观看免费视频| 在线免费观看h片| 久久精品亚洲精品国产色婷| 无人在线观看完整免费版视频| 亚洲首页国产精品丝袜| 凹凸精品视频分类国产品免费| 国产精品免费视频观看拍拍| 久久久久亚洲AV成人无码| 亚洲精品在线免费看| 亚洲国产精品无码久久| 亚洲人成色77777在线观看大| 国产亚洲免费的视频看| 亚洲国产精品成人久久久| 免费无码又爽又刺激高潮| eeuss免费天堂影院| 久久久久亚洲av无码专区导航| 成年人在线免费看视频| 一区二区三区视频免费观看| 亚洲午夜精品久久久久久人妖| 夜夜爽免费888视频| a级毛片无码免费真人久久| 亚洲国产成人精品无码区在线秒播| 日本不卡在线观看免费v| 中文字幕无码毛片免费看| 亚洲乱码中文字幕小综合| 亚洲中文字幕视频国产| 无码中文在线二区免费|