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

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

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

    各種排序算法(轉載)

    Posted on 2008-10-31 22:36 橡皮人 閱讀(271) 評論(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;
           }
       }




    只有注冊用戶登錄后才能發(fā)表評論。


    網站導航:
     

    posts - 28, comments - 5, trackbacks - 0, articles - 0

    Copyright © 橡皮人

    主站蜘蛛池模板: 青青青国产在线观看免费网站 | 91高清免费国产自产| 成人免费av一区二区三区| 美女被免费视频网站a| 国产精品亚洲五月天高清| 国产精品成人亚洲| 直接进入免费看黄的网站| 免费无码又爽又黄又刺激网站| 国产亚洲漂亮白嫩美女在线| 亚洲av乱码中文一区二区三区| 久久精品亚洲日本波多野结衣| 激情小说亚洲色图| 无码精品人妻一区二区三区免费 | 亚洲AV无码一区二区三区DV | 国产无遮挡色视频免费视频| 在线看片无码永久免费aⅴ| 国产一级淫片免费播放电影| www.91亚洲| 亚洲色成人网站WWW永久| 亚洲AV午夜福利精品一区二区 | 久久精品国产精品亚洲下载| 国产成人A亚洲精V品无码 | 日韩成人免费aa在线看| 国产精品无码素人福利免费| 亚洲AV无码成H人在线观看| 亚洲日韩在线第一页| 亚洲爆乳无码一区二区三区| 日韩亚洲Av人人夜夜澡人人爽| 亚洲国产精品一区二区久| 亚洲日韩AV一区二区三区中文| 美女视频黄a视频全免费网站色| 羞羞视频在线观看免费| 在线涩涩免费观看国产精品| 99久久精品日本一区二区免费| 好吊妞在线新免费视频| 亚洲一区二区精品视频| 亚洲AV无码久久精品蜜桃| 亚洲av成人综合网| 日本永久免费a∨在线视频| 日本在线免费播放| 成人午夜视频免费|