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

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

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

    feitian

    各種排序算法java實現 (轉自http://duketian.blog.chinajavaworld.com/entry/3852/0/)

      1 package org.rut.util.algorithm.support;
      2  
      3 import org.rut.util.algorithm.SortUtil;
      4 /**
      5  * @author treeroot
      6  * @since 2006-2-2
      7  * @version 1.0
      8  */
      9 public class InsertSort implements SortUtil.Sort{
     10  
     11     /* (non-Javadoc)
     12      * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
     13      */
     14     public void sort(int[] data) {
     15         int temp;
     16         for(int i=1;i<data.length;i++){
     17             for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){
     18                 SortUtil.swap(data,j,j-1);
     19             }
     20         }        
     21     }
     22  
     23 }
     24 冒泡排序:
     25  
     26 package org.rut.util.algorithm.support;
     27  
     28 import org.rut.util.algorithm.SortUtil;
     29  
     30 /**
     31  * @author treeroot
     32  * @since 2006-2-2
     33  * @version 1.0
     34  */
     35 public class BubbleSort implements SortUtil.Sort{
     36  
     37     /* (non-Javadoc)
     38      * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
     39      */
     40     public void sort(int[] data) {
     41         int temp;
     42         for(int i=0;i<data.length;i++){
     43             for(int j=data.length-1;j>i;j--){
     44                 if(data[j]<data[j-1]){
     45                     SortUtil.swap(data,j,j-1);
     46                 }
     47             }
     48         }
     49     }
     50  
     51 }
     52  
     53 選擇排序:
     54  
     55 package org.rut.util.algorithm.support;
     56  
     57 import org.rut.util.algorithm.SortUtil;
     58  
     59 /**
     60  * @author treeroot
     61  * @since 2006-2-2
     62  * @version 1.0
     63  */
     64 public class SelectionSort implements SortUtil.Sort {
     65  
     66     /*
     67      * (non-Javadoc)
     68      * 
     69      * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
     70      */
     71     public void sort(int[] data) {
     72         int temp;
     73         for (int i = 0; i >< data.length; i++) {
     74             int lowIndex = i;
     75             for (int j = data.length - 1; j > i; j--) {
     76                 if (data[j] < data[lowIndex]) {
     77                     lowIndex = j;
     78                 }
     79             }
     80             SortUtil.swap(data,i,lowIndex);
     81         }
     82     }
     83  
     84 }
     85  
     86 Shell排序:
     87  
     88 package org.rut.util.algorithm.support;
     89  
     90 import org.rut.util.algorithm.SortUtil;
     91  
     92 /**
     93  * @author treeroot
     94  * @since 2006-2-2
     95  * @version 1.0
     96  */
     97 public class ShellSort implements SortUtil.Sort{
     98  
     99     /* (non-Javadoc)
    100      * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
    101      */
    102     public void sort(int[] data) {
    103         for(int i=data.length/2;i>2;i/=2){
    104             for(int j=0;j<i;j++){
    105                 insertSort(data,j,i);
    106             }
    107         }
    108         insertSort(data,0,1);
    109     }
    110  
    111     /**
    112      * @param data
    113      * @param j
    114      * @param i
    115      */
    116     private void insertSort(int[] data, int start, int inc) {
    117         int temp;
    118         for(int i=start+inc;i<data.length;i+=inc){
    119             for(int j=i;(j>=inc)&&(data[j]<data[j-inc]);j-=inc){
    120                 SortUtil.swap(data,j,j-inc);
    121             }
    122         }
    123     }
    124  
    125 }
    126  
    127 快速排序:
    128  
    129 package org.rut.util.algorithm.support;
    130  
    131 import org.rut.util.algorithm.SortUtil;
    132  
    133 /**
    134  * @author treeroot
    135  * @since 2006-2-2
    136  * @version 1.0
    137  */
    138 public class QuickSort implements SortUtil.Sort{
    139  
    140     /* (non-Javadoc)
    141      * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
    142      */
    143     public void sort(int[] data) {
    144         quickSort(data,0,data.length-1);        
    145     }
    146     private void quickSort(int[] data,int i,int j){
    147         int pivotIndex=(i+j)/2;
    148         //swap
    149         SortUtil.swap(data,pivotIndex,j);
    150         
    151         int k=partition(data,i-1,j,data[j]);
    152         SortUtil.swap(data,k,j);
    153         if((k-i)>1) quickSort(data,i,k-1);
    154         if((j-k)>1) quickSort(data,k+1,j);
    155         
    156     }
    157     /**
    158      * @param data
    159      * @param i
    160      * @param j
    161      * @return
    162      */
    163     private int partition(int[] data, int l, int r,int pivot) {
    164         do{
    165            while(data[++l]<pivot);
    166            while((r!=0)&&data[--r]>pivot);
    167            SortUtil.swap(data,l,r);
    168         }
    169         while(l<r);
    170         SortUtil.swap(data,l,r);        
    171         return l;
    172     }
    173  
    174 }
    175 改進后的快速排序:
    176  
    177 package org.rut.util.algorithm.support;
    178  
    179 import org.rut.util.algorithm.SortUtil;
    180  
    181 /**
    182  * @author treeroot
    183  * @since 2006-2-2
    184  * @version 1.0
    185  */
    186 public class ImprovedQuickSort implements SortUtil.Sort {
    187  
    188     private static int MAX_STACK_SIZE=4096;
    189     private static int THRESHOLD=10;
    190     /* (non-Javadoc)
    191      * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
    192      */
    193     public void sort(int[] data) {
    194         int[] stack=new int[MAX_STACK_SIZE];
    195         
    196         int top=-1;
    197         int pivot;
    198         int pivotIndex,l,r;
    199         
    200         stack[++top]=0;
    201         stack[++top]=data.length-1;
    202         
    203         while(top>0){
    204             int j=stack[top--];
    205             int i=stack[top--];
    206             
    207             pivotIndex=(i+j)/2;
    208             pivot=data[pivotIndex];
    209             
    210             SortUtil.swap(data,pivotIndex,j);
    211             
    212             //partition
    213             l=i-1;
    214             r=j;
    215             do{
    216                 while(data[++l]<pivot);
    217                 while((r!=0)&&(data[--r]>pivot));
    218                 SortUtil.swap(data,l,r);
    219             }
    220             while(l<r);
    221             SortUtil.swap(data,l,r);
    222             SortUtil.swap(data,l,j);
    223             
    224             if((l-i)>THRESHOLD){
    225                 stack[++top]=i;
    226                 stack[++top]=l-1;
    227             }
    228             if((j-l)>THRESHOLD){
    229                 stack[++top]=l+1;
    230                 stack[++top]=j;
    231             }
    232             
    233         }
    234         //new InsertSort().sort(data);
    235         insertSort(data);
    236     }
    237     /**
    238      * @param data
    239      */
    240     private void insertSort(int[] data) {
    241         int temp;
    242         for(int i=1;i<data.length;i++){
    243             for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){
    244                 SortUtil.swap(data,j,j-1);
    245             }
    246         }       
    247     }
    248  
    249 }
    250  
    251 歸并排序:
    252  
    253 package org.rut.util.algorithm.support;
    254  
    255 import org.rut.util.algorithm.SortUtil;
    256  
    257 /**
    258  * @author treeroot
    259  * @since 2006-2-2
    260  * @version 1.0
    261  */
    262 public class MergeSort implements SortUtil.Sort{
    263  
    264     /* (non-Javadoc)
    265      * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
    266      */
    267     public void sort(int[] data) {
    268         int[] temp=new int[data.length];
    269         mergeSort(data,temp,0,data.length-1);
    270     }
    271     
    272     private void mergeSort(int[] data,int[] temp,int l,int r){
    273         int mid=(l+r)/2;
    274         if(l==r) return ;
    275         mergeSort(data,temp,l,mid);
    276         mergeSort(data,temp,mid+1,r);
    277         for(int i=l;i<=r;i++){
    278             temp[i]=data[i];
    279         }
    280         int i1=l;
    281         int i2=mid+1;
    282         for(int cur=l;cur<=r;cur++){
    283             if(i1==mid+1)
    284                 data[cur]=temp[i2++];
    285             else if(i2>r)
    286                 data[cur]=temp[i1++];
    287             else if(temp[i1]<temp[i2])
    288                 data[cur]=temp[i1++];
    289             else
    290                 data[cur]=temp[i2++];            
    291         }
    292     }
    293  
    294 }
    295  
    296 改進后的歸并排序:
    297  
    298 package org.rut.util.algorithm.support;
    299  
    300 import org.rut.util.algorithm.SortUtil;
    301  
    302 /**
    303  * @author treeroot
    304  * @since 2006-2-2
    305  * @version 1.0
    306  */
    307 public class ImprovedMergeSort implements SortUtil.Sort {
    308  
    309     private static final int THRESHOLD = 10;
    310  
    311     /*
    312      * (non-Javadoc)
    313      * 
    314      * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
    315      */
    316     public void sort(int[] data) {
    317         int[] temp=new int[data.length];
    318         mergeSort(data,temp,0,data.length-1);
    319     }
    320  
    321     private void mergeSort(int[] data, int[] temp, int l, int r) {
    322         int i, j, k;
    323         int mid = (l + r) / 2;
    324         if (l == r)
    325             return;
    326         if ((mid - l) >= THRESHOLD)
    327             mergeSort(data, temp, l, mid);
    328         else
    329             insertSort(data, l, mid - l + 1);
    330         if ((r - mid) > THRESHOLD)
    331             mergeSort(data, temp, mid + 1, r);
    332         else
    333             insertSort(data, mid + 1, r - mid);
    334  
    335         for (i = l; i <= mid; i++) {
    336             temp[i] = data[i];
    337         }
    338         for (j = 1; j <= r - mid; j++) {
    339             temp[r - j + 1= data[j + mid];
    340         }
    341         int a = temp[l];
    342         int b = temp[r];
    343         for (i = l, j = r, k = l; k <= r; k++) {
    344             if (a < b) {
    345                 data[k] = temp[i++];
    346                 a = temp[i];
    347             } else {
    348                 data[k] = temp[j--];
    349                 b = temp[j];
    350             }
    351         }
    352     }
    353  
    354     /**
    355      * @param data
    356      * @param l
    357      * @param i
    358      */
    359     private void insertSort(int[] data, int start, int len) {
    360         for(int i=start+1;i<start+len;i++){
    361             for(int j=i;(j>start) && data[j]<data[j-1];j--){
    362                 SortUtil.swap(data,j,j-1);
    363             }
    364         }
    365     }
    366  
    367 }
    368 堆排序:
    369  
    370 package org.rut.util.algorithm.support;
    371  
    372 import org.rut.util.algorithm.SortUtil;
    373  
    374 /**
    375  * @author treeroot
    376  * @since 2006-2-2
    377  * @version 1.0
    378  */
    379 public class HeapSort implements SortUtil.Sort{
    380  
    381     /* (non-Javadoc)
    382      * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
    383      */
    384     public void sort(int[] data) {
    385         MaxHeap h=new MaxHeap();
    386         h.init(data);
    387         for(int i=0;i<data.length;i++)
    388             h.remove();
    389         System.arraycopy(h.queue,1,data,0,data.length);
    390     }
    391  
    392  
    393      private static class MaxHeap{
    394          
    395         
    396         void init(int[] data){
    397             this.queue=new int[data.length+1];
    398             for(int i=0;i<data.length;i++){
    399                 queue[++size]=data[i];
    400                 fixUp(size);
    401             }
    402         }
    403          
    404         private int size=0;
    405  
    406         private int[] queue;
    407                 
    408         public int get() {
    409             return queue[1];
    410         }
    411  
    412         public void remove() {
    413             SortUtil.swap(queue,1,size--);
    414             fixDown(1);
    415         }
    416         //fixdown
    417         private void fixDown(int k) {
    418             int j;
    419             while ((j = k ><< 1<= size) {
    420                 if (j < size && queue[j]<queue[j+1])
    421                     j++
    422                 if (queue[k]>queue[j]) //不用交換
    423                     break;
    424                 SortUtil.swap(queue,j,k);
    425                 k = j;
    426             }
    427         }
    428         private void fixUp(int k) {
    429             while (k > 1) {
    430                 int j = k >> 1;
    431                 if (queue[j]>queue[k])
    432                     break;
    433                 SortUtil.swap(queue,j,k);
    434                 k = j;
    435             }
    436         }
    437  
    438     }
    439  
    440 }
    441  
    442  
    443  
    444 SortUtil:
    445  
    446 package org.rut.util.algorithm;
    447  
    448 import org.rut.util.algorithm.support.BubbleSort;
    449 import org.rut.util.algorithm.support.HeapSort;
    450 import org.rut.util.algorithm.support.ImprovedMergeSort;
    451 import org.rut.util.algorithm.support.ImprovedQuickSort;
    452 import org.rut.util.algorithm.support.InsertSort;
    453 import org.rut.util.algorithm.support.MergeSort;
    454 import org.rut.util.algorithm.support.QuickSort;
    455 import org.rut.util.algorithm.support.SelectionSort;
    456 import org.rut.util.algorithm.support.ShellSort;
    457  
    458 /**
    459  * @author treeroot
    460  * @since 2006-2-2
    461  * @version 1.0
    462  */
    463 public class SortUtil {
    464     public final static int INSERT = 1;
    465  
    466     public final static int BUBBLE = 2;
    467  
    468     public final static int SELECTION = 3;
    469  
    470     public final static int SHELL = 4;
    471  
    472     public final static int QUICK = 5;
    473  
    474     public final static int IMPROVED_QUICK = 6;
    475  
    476     public final static int MERGE = 7;
    477  
    478     public final static int IMPROVED_MERGE = 8;
    479  
    480     public final static int HEAP = 9;
    481  
    482     public static void sort(int[] data) {
    483         sort(data, IMPROVED_QUICK);
    484     }
    485     private static String[] name={
    486             "insert","bubble","selection","shell","quick","improved_quick","merge","improved_merge","heap"
    487     };
    488     
    489     private static Sort[] impl=new Sort[]{
    490             new InsertSort(),
    491             new BubbleSort(),
    492             new SelectionSort(),
    493             new ShellSort(),
    494             new QuickSort(),
    495             new ImprovedQuickSort(),
    496             new MergeSort(),
    497             new ImprovedMergeSort(),
    498             new HeapSort()
    499     };
    500  
    501     public static String toString(int algorithm){
    502         return name[algorithm-1];
    503     }
    504     
    505     public static void sort(int[] data, int algorithm) {
    506         impl[algorithm-1].sort(data);
    507     }
    508  
    509     public static interface Sort {
    510         public void sort(int[] data);
    511     }
    512  
    513     public static void swap(int[] data, int i, int j) {
    514         int temp = data[i];
    515         data[i] = data[j];
    516         data[j] = temp;
    517     }
    518 }
    519 
    (轉)http://duketian.blog.chinajavaworld.com/entry/3852/0/

    posted on 2011-04-24 12:04 飛天wfu 閱讀(213) 評論(0)  編輯  收藏 所屬分類: J2ME


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


    網站導航:
     
    主站蜘蛛池模板: 国产免费黄色无码视频| 在线永久免费的视频草莓| 无码av免费一区二区三区| 国产精品四虎在线观看免费 | 国产亚洲日韩在线三区| 国产亚洲精品影视在线| 中文字幕乱码一区二区免费| 日本媚薬痉挛在线观看免费| 国产.亚洲.欧洲在线| 一区二区三区福利视频免费观看| 亚洲av无码专区在线| 18禁美女裸体免费网站| 久久精品国产亚洲香蕉| 精品国产呦系列在线观看免费| 久久亚洲精品国产精品| 久久国产乱子伦精品免费强| 亚洲精品狼友在线播放| 中文字幕乱码系列免费| 亚洲av无码成人黄网站在线观看| 在线a毛片免费视频观看| 亚洲综合在线一区二区三区| 成人免费无码大片A毛片抽搐色欲| 亚洲乱码中文字幕小综合| 91热成人精品国产免费| 亚洲免费黄色网址| 国产综合精品久久亚洲| 在线播放免费播放av片| 97免费人妻在线视频| 67194在线午夜亚洲| 亚洲国产精品福利片在线观看| 香港a毛片免费观看| 二级毛片免费观看全程| 免费一级国产生活片| 免费精品国自产拍在线播放| 久久精品亚洲男人的天堂| 天堂在线免费观看| 4444亚洲国产成人精品| 免费看片在线观看| 免费在线看污视频| 亚洲精品无码久久久久久久| 免费网站看v片在线香蕉|