快速排序:package org.rut.util.algorithm.support;import org.rut.util.algorithm.SortUtil;/**
 * @author treeroot
 * @since 2006-2-2
 * @version 1.0
 */
public class QuickSort implements SortUtil.Sort{    /* (non-Javadoc)
     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
     */
    public void sort(int[] data) {
        quickSort(data,0,data.length-1);        
    }
    private void quickSort(int[] data,int i,int j){
        int pivotIndex=(i+j)/2;
        //swap
        SortUtil.swap(data,pivotIndex,j);
        
        int k=partition(data,i-1,j,data[j]);
        SortUtil.swap(data,k,j);
        if((k-i)>1) quickSort(data,i,k-1);
        if((j-k)>1) quickSort(data,k+1,j);
        
    }
    /**
     * @param data
     * @param i
     * @param j
     * @return
     */
    private int partition(int[] data, int l, int r,int pivot) {
        do{
           while(data[++l]<pivot);
           while((r!=0)&&data[--r]>pivot);
           SortUtil.swap(data,l,r);
        }
        while(l<r);
        SortUtil.swap(data,l,r);        
        return l;
    }}
改进后的快速排序:package org.rut.util.algorithm.support;import org.rut.util.algorithm.SortUtil;/**
 * @author treeroot
 * @since 2006-2-2
 * @version 1.0
 */
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);
            }
        }       
    }}

解决方案 »

  1.   

    归并排序:package org.rut.util.algorithm.support;import org.rut.util.algorithm.SortUtil;/**
     * @author treeroot
     * @since 2006-2-2
     * @version 1.0
     */
    public class MergeSort implements SortUtil.Sort{    /* (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 mid=(l+r)/2;
            if(l==r) return ;
            mergeSort(data,temp,l,mid);
            mergeSort(data,temp,mid+1,r);
            for(int i=l;i<=r;i++){
                temp[i]=data[i];
            }
            int i1=l;
            int i2=mid+1;
            for(int cur=l;cur<=r;cur++){
                if(i1==mid+1)
                    data[cur]=temp[i2++];
                else if(i2>r)
                    data[cur]=temp[i1++];
                else if(temp[i1]<temp[i2])
                    data[cur]=temp[i1++];
                else
                    data[cur]=temp[i2++];            
            }
        }}
    改进后的归并排序:package org.rut.util.algorithm.support;import org.rut.util.algorithm.SortUtil;/**
     * @author treeroot
     * @since 2006-2-2
     * @version 1.0
     */
    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);
                }
            }
        }
      

  2.   

    堆排序:package org.rut.util.algorithm.support;import org.rut.util.algorithm.SortUtil;/**
     * @author treeroot
     * @since 2006-2-2
     * @version 1.0
     */
    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;
                }
            }    }
      

  3.   

    dash_running() ( ) 信誉:100    Blog   加为好友  2007-4-24 0:08:29  得分: 0  
     
     
       
    跟用c或c++写有区别吗?  
     
    =====================================================================
    这个还真不太清楚....有了解c或c++的解释一下吧... 呵呵
      

  4.   

    我这里有本书里一个章节是专门介绍排序的,其实有时候并没有用到如此多的排序方法,选择一种常用的就行了.
    MARK.
      

  5.   

    ding  a !
    正希望找,就看到楼主的贴了!
      

  6.   

    哈哈~太好了,正需要~万分感谢lz and 你的同学~
      

  7.   

    java.util.Arrays.sort(array);
    这个方法不就可以实现升序排列了吗?
    要那么多种算法,做什么用???
      

  8.   

    这个 怎么说呢?只能当作练练手啦。JAVA的util包提供了丰富的数据结构及相关操作,而且是经过优化了的,可以满足开发需求了,没必要自己再去写。
      

  9.   

    org.rut.util.algorithm.SortUtil
    这个类呢?
      

  10.   

    好像是java那本数据结构书里的程序
      

  11.   

    有点异议,java中有collecation接口的sort()方法,不用这样长篇的讲数据结构吧?
      

  12.   

    org.rut.util.algorithm.SortUtil,这个类呢?楼主要发完整的,别发缺胳膊少腿的代码
      

  13.   

    org.rut.util.algorithm.SortUtil
    这个类呢?
    lz,发上来吧