算法(第四版)学习笔记之java实现快速排序
2015-07-25 11:45
597 查看
快速排序是一种分治的排序算法。它将一个数组分成两个子数组,将两部分独立地排序。快速排序和归并排序是互补的,归并排序将两个子数组分别排序,并将有序的子数组归并以将整个数组排序;而快速排序则是当两个子数组有序时整个数组也就自然有序了。在快速排序中,切分的位置取决于数组的内容。
优点:
1.实现简单;
2.适用于各种不同的输入数据且在一般应用中比其他排序算法都要快得多;
3.原地排序;
4.时间复杂度为o(nlgn);
5.内循环比大多数排序算法都要短,比较次数少。
缺点:快速排序算法非常脆弱,在实现时要非常小心才能避免低劣的性能。
代码如下:
优点:
1.实现简单;
2.适用于各种不同的输入数据且在一般应用中比其他排序算法都要快得多;
3.原地排序;
4.时间复杂度为o(nlgn);
5.内循环比大多数排序算法都要短,比较次数少。
缺点:快速排序算法非常脆弱,在实现时要非常小心才能避免低劣的性能。
代码如下:
/** * * @author seabear * */ public class QuickSort { public static boolean less(Comparable v,Comparable w) { return v.compareTo(w) < 0; } public static void exch(Comparable[] a,int i,int j) { Comparable temp = a[i]; a[i] = a[j]; a[j] = temp; } public static void sort(Comparable[] a) { sort(a , 0 , a.length - 1); } public static void sort(Comparable[] a,int lo,int hi) { if(hi <= lo) { return ; } int j = partition(a,lo,hi); sort(a , lo , j - 1 ); sort(a , j + 1 , hi ); } public static int partition(Comparable[] a,int lo,int hi) { int i = lo; Comparable v = a[lo]; int j = hi + 1; while(true) { while(less(a[++i],v)) { if(i == hi) { break; } } while(less(v,a[--j])) { if(j == lo) { break; } } if(i >= j) { break; } exch(a,i,j); } exch(a, lo, j); return j; } public static void show(Comparable[] a) { for(int i = 0 ; i < a.length ; i++) { System.out.print(a[i] + " "); } System.out.println(); } public static void main(String[] args) { Integer[] a = new Integer[10]; for(int i = 0; i < 10; i++) { a[i] = (int)(Math.random() * 10 + 1); } show(a); sort(a); show(a); } }
相关文章推荐
- eclipse常用的快捷键
- mac下 Android Studio && PHPStorm 在JDK1.8下字体问题的解决
- SpringMVC+Hibernate+Spring 简单的一个整合实例
- java新手笔记16 面积
- java.io学习总结
- java:int到byte的转换
- Java IO学习【8】利用缓冲区进行文件的复制
- java常用API之查找字符串出现次数
- Java错误提示------------------Cannot reduce the visibility of the inherited method from MouseListener
- 史上最全的随机数生成java算法
- 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展
- JavaWeb_Hibernate
- Eclipse集成PDT+XDebug调试PHP脚本
- java反射机制
- Java_web_Ajax技术
- java中的流
- java的IO框架总结
- 源码深度解析SpringMvc请求运行机制(转)
- java新手笔记15 多态
- JAVA学习笔记三