各种排序算法速度的比较!!不知道好不好拿来和大家分享下。。。。。有什么不好的大家多多包涵。。。代码如下: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原则上可以适用于大多数情况。
[解决办法]
同意楼上的观点,算法用的不是很多,并且算法需要根据实际情况而定,不能说哪个好哪个不好。
[解决办法]
确实,要视数据量而定,而这又是其中一个因素。
楼主这个方法太过于。。。。。
呵呵。
[解决办法]
各种排序算法的优劣不是几个例子能证明的。
数据量的大小,数据是否基本有序,甚至不同编译器的编译结果都可能有影响。而且有些排序虽然慢一点,但它能够解决超大数据量排序问题,其他算法可能就做不到这一点。
对于搂主的精神我是很支持的,这本身是一个很好的实践过程。
[解决办法]
