首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

各种排序算法速度的比较!不知道好不好拿来跟大家分享下。有什么不好的大家多多包涵。

2011-12-21 
各种排序算法速度的比较!!不知道好不好拿来和大家分享下。。。。。有什么不好的大家多多包涵。。。代码如下:Java c

各种排序算法速度的比较!!不知道好不好拿来和大家分享下。。。。。有什么不好的大家多多包涵。。。
代码如下:

Java code
package com.order.algorithm; 
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","merge","heap"
  };
 
  private static Sort[] impl=new Sort[]{
        new InsertSort(),
        new BubbleSort(),
        new SelectionSort(),
        new ShellSort(),
        new QuickSort(),
        new MergeSort(),
        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;
  }
}

Java code
package com.order.algorithm;public class BubbleSort implements SortUtil.Sort{      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);              }            }        }      }    }

Java code
package com.order.algorithm;public class HeapSort implements SortUtil.Sort{      public void sort(int[] data) {        MaxHeap h=new MaxHeap();        h.init(data);        for(int i=0;i<data.length;i++)            h.remove();=new TextFie

Java code
package com.order.algorithm;public class InsertSort implements SortUtil.Sort{      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);            }        }           }    }

Java code
package com.order.algorithm;public class MergeSort implements SortUtil.Sort{      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=data;        }        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++];                 }      }    } 


Java code
package com.order.algorithm;public class QuickSort implements SortUtil.Sort{      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;      }    }




--------------------------------
以下内容为自动编辑的内容,并非楼主的发贴内容,此仅用于显示而已,并无任何其他特殊作用
楼主【dongqdonglin】截止到2008-08-04 17:34:29的历史汇总数据(不包括此帖):
发帖的总数量:10 发帖的总分数:270 每贴平均分数:27  
回帖的总数量:134 得分贴总数量:54 回帖的得分率:40%  
结贴的总数量:7 结贴的总分数:180  
无满意结贴数:3 无满意结贴分:110  
未结的帖子数:3 未结的总分数:90  
结贴的百分比:70.00 % 结分的百分比:66.67 %  
无满意结贴率:42.86 % 无满意结分率:61.11 %  
楼主加油
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=dongqdonglin

[解决办法]
不过是否是这样呢?可能执行某个排序的时候
这个线程挂起了,然后......
[解决办法]
^_^,我以前也是这样糊弄老师的,不过仔细想想这样
未必是对的
[解决办法]
数据量的大小对各排序算法影响也比较大的
[解决办法]
缺少了2个
ImprovedQuickSort iqs = new ImprovedQuickSort();
// ShellSort ss = new ShellSort();
[解决办法]
这个数组a一直在用么?第一个算法排好了作为第二个算法的输入?那不是各个算法输入不一致么?
[解决办法]
原则上没用。

1、各种排序算法的优劣,应该有专门的文章(技术文章和数学证明)说过,而不是仅仅几个小例子就可以证明的。

2、Arrays.sort原则上可以适用于大多数情况。
[解决办法]
同意楼上的观点,算法用的不是很多,并且算法需要根据实际情况而定,不能说哪个好哪个不好。
[解决办法]
确实,要视数据量而定,而这又是其中一个因素。
楼主这个方法太过于。。。。。
呵呵。
[解决办法]
各种排序算法的优劣不是几个例子能证明的。
数据量的大小,数据是否基本有序,甚至不同编译器的编译结果都可能有影响。而且有些排序虽然慢一点,但它能够解决超大数据量排序问题,其他算法可能就做不到这一点。

对于搂主的精神我是很支持的,这本身是一个很好的实践过程。
[解决办法]
探讨
原则上没用。

1、各种排序算法的优劣,应该有专门的文章(技术文章和数学证明)说过,而不是仅仅几个小例子就可以证明的。

2、Arrays.sort原则上可以适用于大多数情况。

热点排行
Bad Request.