您的位置:首页 > 编程语言 > Java开发

快速排序算法剖析

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 快速排序