基本排序的实现与性能比较
2016-03-05 00:00
393 查看
摘要: 基本排序的实现与性能比较
基本排序的实现与性能比较
基本排序一般有:选择排序,插入排序,冒泡排序。
它们之间的性能比较:在最坏情况和平均情况三者都是二次方时间复杂度。基本不用额外的存储控件。但还是有一个系数的差距。还要比较的是移动次数和比较次数。
选择排序进行了约n*n/2次的比较,和n次交换。
插入排序进行了n*n/4 次比较,n*n/4 次移动。
冒泡排序进行n*n/2 次的比较和移动。
根据实验研究(国外研究的结论):对小文件的排序,插入排序和选择排序比冒泡排序快2倍。当比较的是String 或者是对象数组时,插入排序比其他两个方法快的多。如果交换次数开销很大的时候:选择排序是最好的,时间就不是第一位考虑了。
基本排序的实现与性能比较
基本排序一般有:选择排序,插入排序,冒泡排序。
//专门的sort排序类 public class Sort { static boolean less(int a, int b){ return a<b; } static void exch(int array[],int i,int j){ int temp=array[i]; array[i]=array[j]; array[j]=temp; } static void comExch(int array[],int i,int j){ if(less(array[j],array[i])) exch(array,i,j); } static void sort(int array[] ,int l,int r){ example(array,l,r); } static void example(int array[],int l,int r){ for(int i=l+1;i<r;i++){ for(int j=i;j>l;j--){ comExch(array,j-1,j); } } } //选择排序,每次序最小的 static void selection(int array[],int l,int r){ for(int i=l;i<r;i++){ int min=i; for(int j=i+1;j<r;j++){ if(less(array[j],array[min])){ min=j; } } exch(array,i,min); } } //插入排序 static void insertion(int array[],int l,int r){ int i; for(i=r;i>l;i--) comExch(array, i-1, i); for(i=l+2;i<=r;i++){ int j=i; int v=array[i]; while(less(v,array[j-1])){ array[j]=array[j-1]; j--; } array[j]=v; } } //冒泡排序 static void bubble(int array[],int l,int r){ for(int i=l;i<r;i++){ for(int j=r;j>i;j--){ comExch(array, j-1, j); } } } public static void main(String args[]){ int array[]={1,3,2,5,4,9,8,0}; bubble(array,0,7); for(Integer n:array){ System.out.println(n); } } }
它们之间的性能比较:在最坏情况和平均情况三者都是二次方时间复杂度。基本不用额外的存储控件。但还是有一个系数的差距。还要比较的是移动次数和比较次数。
选择排序进行了约n*n/2次的比较,和n次交换。
插入排序进行了n*n/4 次比较,n*n/4 次移动。
冒泡排序进行n*n/2 次的比较和移动。
根据实验研究(国外研究的结论):对小文件的排序,插入排序和选择排序比冒泡排序快2倍。当比较的是String 或者是对象数组时,插入排序比其他两个方法快的多。如果交换次数开销很大的时候:选择排序是最好的,时间就不是第一位考虑了。
相关文章推荐
- Mybaits源码分析
- netty 学习- channel代码相关注释
- Java:过去、未来的互联网编程之王
- Zephir-异常处理
- Zephir调用函数
- Zephir闭包
- Zephir静态分析
- floyd_warshall 算法.
- 星盾科技-2016年3月3日
- 星盾科技-2016年3月4日
- CSS3鼠标移入移出图片生成随机动画
- python之装饰器
- 异常安全,RAII与C++11
- GoLang 文件写入方式效率对比
- 微软收购Xamarin,你怎么看?
- 选择蜂窝教育Java培训 开启技术人生
- PAT (Advanced Level) Practise 1023 Have Fun with Numbers (20)
- C# 函数引用传递(址传递)ref、out以及值传递之间的运行效率问题
- 微信常见问题
- Cron表达式参数以及Cron表达式测试工具