快速排序算法剖析
2016-02-29 18:26
357 查看
快速排序算法和冒泡排序算法类似,都是基于交换排序的思想。快速排序算法对冒泡排序算法进行了改进,从而具有更高的执行效率。
通过程序来讨论基于数组的快速排序算法是最简单粗暴的。
通过程序来讨论基于数组的快速排序算法是最简单粗暴的。
package 快速排序; import java.util.Scanner; public class Example { public static void main(String[] args) { /* * 随机输入10个整数 * 将这10个整数顺序存放到数组arr[]中 */ Scanner scan=new Scanner(System.in); int[] arr=new int[10]; for(int i=0;i<arr.length;i++){ arr[i]=scan.nextInt(); } //调用quickOrder()函数进行快速排序 quickOrder(arr, 0, arr.length-1); //将排好序的数组顺序输出 for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } } /* * 编写getMiddle()函数将数组参数list分成左右两部分 * 取数组参数list的首位数字作为参考点,也就是list[low],记为temp * 将小于temp的数放到数组低位,大于temp的数放到数组高位 * 由于取的参考点为数组低位,所以要先找到小于temp的数放到数组低位,占据原先temp的位置,也就是list[low] * 所以下面内层的两个while函数顺序固定,不可颠倒 * 外层while循环推出后将temp放回到low的位置,便完成此次左右分组 * 其中在下标low左侧的数都小于temp,右侧的数都大于temp * 最后返回分界点下标low * */ public static int getMiddle(int[] list,int low,int high) { int temp=list[low]; while(low<high){ while(low<high&&list[high]>=temp){ high--; } list[low]=list[high]; while(low<high&&list[low]<=temp){ low++; } list[high]=list[low]; } list[low]=temp; return low; } public static void quickOrder(int[] list,int low,int high) { //low<high是递归调用进行的条件 if(low<high){ //得到分界点下标,同时也完成了左右分组 int middle=getMiddle(list, low, high); //对分界点左侧的部分进行递归操作,不含分界点 quickOrder(list, low, middle-1); //对分界点右侧的部分进行递归操作,不含分界点 quickOrder(list, middle+1, high); } } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序