本站首页    管理页面    写新日志    退出

«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告

  如果你忍了,欺负你的人将来可能就进监狱了。如果你反击,欺负你的人将来可能就获选十大杰出青年了。

        QQ: 3159671

http://greenboy.javaeye.com/

http://blog.sina.com.cn/u/1278341164 小鸟吹烟


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:小鸟吹烟
日志总数:157
评论数量:424
留言数量:-1
访问次数:1257965
建立时间:2006年10月23日




[J2SE]排序
心得体会,  软件技术

tone 发表于 2007/3/6 13:53:31

  protected void orderSort(List route) {     //按分数排序  //此方法会自动将LIST中两个字段从头到未全部比较并排序,把rou2-rou1实现降序排列   Collections.sort(route,new Comparator(){   public int compare(Object arg0, Object arg1) {    Route rou1=(Route)arg0;    Route rou2=(Route)arg1;     return (        rou2.getTotal().hashCode()-rou1.getTotal().hashCode()     );   }}        ); } orderSort(route);//进行排序Iterator rouIt=route.iterator();


阅读全文(5201) | 回复(6) | 编辑 | 精华
 


回复:排序
心得体会,  软件技术

tone发表评论于2007/3/6 14:29:14

 冒泡排序法 package test;    public class BubbleSort {       public static void main(String[] args){           int []array = {4,3,5,1,2};  //声明一个整型数组,并初始化           String str = "这几个数的排序为:"; //声明一个String类型的变量str,并初始化           int temp; //声明一个整型变量           for(int j=array.length-1;j>0;j--) {   //交换两个相邻的数               for(int i=0;i<j;i++){                   if(array[i]>array[i+1]){                       temp = array[i];                       array[i] = array[i+1];                       array[i+1] = temp;                   }               }           }           System.out.println(str);           for(int serial = 0;serial < array.length;serial++){               System.out.println(array[serial]);  //打印数组           }       }    }   以下为blog主人的回复:  


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:排序
心得体会,  软件技术

tone发表评论于2007/3/6 14:22:08

三种简单排序算法分别的冒泡法,选择排序法和插入法. 三种排序算法的最差运行效率都要达到O(n*n)   1冒泡排序法: void bubbleSort(Type* arr,long len)/*bubble sort algorithm*/ {        long i=0,j=0;/*iterator value*/        assertF(arr!=NULL,"In bubble sort,arr is NULL\n");        for (i=len;i>1;i--)               for(j=0;j<i-1;j++)                      if(arr[j]>arr[j+1])swapArrData(arr,j,j+1); } 从数组的后面位置开始,如果发现有比前面一个位置处的数更小的元素,则把交换这两个数的位置,形成一个类似轻的气泡在水中上升的排序过程.     2插入排序法: void  insertSort(Type* arr,long len)/*InsertSort algorithm*/ {        long i=0,j=0;/*iterator value*/        Type tmpData;        assertF(arr!=NULL,"In InsertSort sort,arr is NULL\n");        for(i=1;i<len;i++)        {               j=i;               tmpData=arr[i];               while(tmpData<arr[j-1]&&j>0)               {                      arr[j]=arr[j-1];                      j--;               }               arr[j]=tmpData;        } } 插入排序算法思路是: 假定这个数组的序是排好的,然后从头往后,如果有数比当前外层元素的值大,则将这个数的位置往后挪,直到当前外层元素的值大于或等于它前面的位置为止.这具算法在排完前k个数之后,可以保证a[1…k]是局部有序的,保证了插入过程的正确性.     3选择排序法: void selectionSort(Type* arr,long len) {        long i=0,j=0;/*iterator value*/        long maxPos;        assertF(arr!=NULL,"In InsertSort sort,arr is NULL\n");        for(i=len-1;i>=1;i--)        {               maxPos=i;               for(j=0;j<i;j++)                      if(arr[maxPos]<arr[j])maxPos=j;               if(maxPos!=i)swapArrData(arr,maxPos,i);        } }   选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量,最后,在二层循环退出后,如果临时变量改变,则说明,有比当前外层循环位置更小的元素,需要将这两个元素交换.          由于这三种算法相对简单,运行效率也比较低,在元素个数比较少的时候用一个问题也是不大的.但当要排序的元素个数>=10000时,基本已经失去的使用价值,在当前的主流机器上, 10000个元素时,排序的时间单位差不多是秒.(相对而言,) 而到了100000个元素的时候,排序的时间单位已经是分钟了,此时,快速排序的运行时间单位 仍是百分之一秒呢. 参:  http://blog.csdn.net/EmilMatthew/archive/2005/09/04/471018.aspx

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:排序
心得体会,  软件技术

tone发表评论于2007/3/6 14:11:07

堆结构的实现 包括最大值堆和最小值堆: 接口: package org.rut.util.structure.heap; /** * @author treeroot * @since 2006-1-31 * @version 1.0 */public interface Heap {    /**     * return the top element of the heap     * @return top element     */    Object get();    /**     * remove the top element of the heap and return it     * the heap must be fixed.     * @return top element     */    Object remove();        /**     * reset the top element      * @param obj the new top element     */    void set(Object obj);    /**     * add a element to the heap.     * if no comparator is set, the obj must be implments comparable interface     * @param obj the element to be added     */    void add(Object obj);    /**     * if the heap is empty return true;     * @return true if heap is empty,else false     */    boolean isEmpty();    /**     * clear the heap     */    void clear();} package org.rut.util.structure.heap; import java.util.Comparator; /** * @author treeroot * @since 2006-1-31 * @version 1.0 */public abstract class AbstractHeap implements Heap {     private int size;     private Object[] queue = new Object[128];     private Comparator comp;     public AbstractHeap() {        this(new Comparable[0]);    }     public AbstractHeap(Comparable[] elements) {        init(elements);    }     public AbstractHeap(Comparator comp, Object[] elements) {        this.comp = comp;        if (this.comp == null)            throw new IllegalArgumentException("compartor can't be null");        init(elements);    }     private void init(Object[] elements) {        for(int i=0;i<elements.length;i++) add(elements[i]);    }     /*     * (non-Javadoc)     *      * @see org.rut.util.structure.heap.Heap#get()     */    public Object get() {        return queue[1];    }     /*     * (non-Javadoc)     *      * @see org.rut.util.structure.heap.Heap#remove()     */    public Object remove() {        Object ret = queue[1];        queue[1] = queue[size];        queue[size--] = null; // Drop extra reference to prevent memory leak        fixDown(1);        return ret;    }     /*     * (non-Javadoc)     *      * @see org.rut.util.structure.heap.Heap#set(java.lang.Object)     */    public void set(Object obj) {        check(obj);        queue[1] = obj;        fixDown(1);    }     /*     * (non-Javadoc)     *      * @see org.rut.util.structure.heap.Heap#add(java.lang.Object)     */    public void add(Object obj) {        check(obj);        if (++size == queue.length) {            Object[] newQueue = new Object[2 * queue.length];            System.arraycopy(queue, 0, newQueue, 0, size);            queue = newQueue;        }        queue[size] = obj;        fixUp(size);    }     /*     * (non-Javadoc)     *      * @see org.rut.util.structure.heap.Heap#isEmpty()     */    public boolean isEmpty() {        return size == 0;    }     /*     * (non-Javadoc)     *      * @see org.rut.util.structure.heap.Heap#clear()     */    public void clear() {        for (int i = 1; i <= size; i++)            queue[i] = null;        size = 0;    }    //check the type    private void check(Object element) {        if (this.comp == null) {            if (!(element instanceof Comparable))                throw new IllegalArgumentException(                        "element must be Comparble when no Comparator is set");        }    }    //compare may be override by subclass    protected int compare(int i,int j){        if(comp!=null) return comp.compare(queue[i],queue[j]);        return ((Comparable)queue[i]).compareTo(queue[j]);    }    //fixup    private void fixUp(int k) {        while (k > 1) {            int j = k >> 1;            if (compare(j,k)<=0)                break;            Object tmp = queue[j]; queue[j] = queue[k]; queue[k] = tmp;            k = j;        }    }    //fixdown    private void fixDown(int k) {        int j;        while ((j = k << 1) <= size) {            if (j < size && compare(j,j+1)>0 )                j++; // j indexes smallest kid            if (compare(k,j)<=0) //不用交换                break;            Object tmp = queue[j]; queue[j] = queue[k]; queue[k] = tmp;            k = j;        }    } } 最大值堆: package org.rut.util.structure.heap; import java.util.Comparator; /** * @author treeroot * @since 2006-1-31 * @version 1.0 */public class MaxHeap extends AbstractHeap implements Heap{    public MaxHeap() {        super();    }     public MaxHeap(Comparable[] elements) {        super(elements);    }     public MaxHeap(Comparator comp, Object[] elements) {        super(comp,elements);    }        /* (non-Javadoc)     * @see org.rut.util.structure.heap.AbstractHeap#compare(int, int)     */    protected int compare(int i, int j) {        return super.compare(j, i);        //use compare(j,i) instead of -compare(i,j)    }} 最小值堆(默认就是): package org.rut.util.structure.heap; import java.util.Comparator; /** * @author treeroot * @since 2006-1-31 * @version 1.0 */public class MinHeap  extends AbstractHeap implements Heap{        public MinHeap() {        super();    }     public MinHeap(Comparable[] elements) {        super(elements);    }     public MinHeap(Comparator comp, Object[] elements) {        super(comp,elements);    }    /* (non-Javadoc)     * @see org.rut.util.structure.heap.AbstractHeap#compare(int, int)     */    protected int compare(int i, int j) {        return super.compare(i, j);    }}     Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=631478

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:排序
心得体会,  软件技术

tone发表评论于2007/3/6 14:08:13

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

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:排序
心得体会,  软件技术

tone发表评论于2007/3/6 14:06:04

class   sort   {         java.lang.Comparable   d[];         sort(java.lang.Comparable   data[])   {   d=data;   }         public   void   quickSort(int   l,int   r)   {             if(l>=r)   return;             int   k=(l+r)/2;             int   last=l;             swap(k,r);             for(int   i=l;i<r;i++)                 if(d[i].compareTo(d[r])==-1)                     swap(last++,i);     //partition             swap(last,r);             quickSort(l,last-1);             quickSort(last+1,r);         }         private   void   swap(int   a,int   b)         {             java.lang.Comparable   t=d[a];             d[a]=d[b];             d[b]=t;         }         public   static   void   main(String   s[])         {             //for   test             Integer   t[]={   new   Integer(4),   new   Integer(1),   new   Integer(3)   };             new   sort(t).quickSort(0,t.length-1);             for(int   i=0;i<t.length;i++)                 System.out.print(t[i]+"   ");             System.out.println();         }     }     这里使用的是快排,算法复杂度o(nlogn)是平均状况下的。类的使用方法在main里面已经演示了,需要注意的是:为了模拟c++的template,我用了java.lang.Comparable接口,所以在使用基本数据类型的使用要用类封装。例如,int的封装类是Integer,double的封装类是Double。

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:排序
心得体会,  软件技术

tone发表评论于2007/3/6 14:01:15

import java.util. Arrays ; public class ArrayDemo1 { public static void main( String args[]) { int vec[] = {37, 47, 23, -5, 19, 56}; Arrays .sort(vec); for ( int i = 0; i < vec. length ; i++) { System .out.println(vec[i]); } } } 初始化一个整数数组然后调用Arrays.sort升序排序那个数组

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144775834 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号