昨天参加笔试,里面有一道题就是手写快速排序,检查了一遍,很遗憾,发现写错了!今天写篇文章,以后忘记了可查看巩固
快速排序基本思想
1.选定p中心轴(随便取值)
2.将大于p的数字放在p的右边
3.将小于p的数字放在p的左边
4.分别对左右子序列重复前三步操作(使用递归)
快速排序执行规则和流程
快速排序代码实现
public class test01 {
public static void main(String[] args) {
int[] a = {9, 9, 6, 7, 2, 3, 8, 5};
quickSort(a,0,a.length-1);
for (int i : a) {
System.out.println(i);
}
}
/**
* #arr 需要排序的数组
* #low 开始时最左边的索引=0
* #high 开始时最右边的索引=arr.length-1
*/
public static void quickSort(int[] a,int low,int high){
if(low>high) return;
int i=low,j=high;//#左边哨兵的索引 #右边哨兵的索引
boolean flag = false;//设置参考,决定i左移或者j右移
while(i!=j){//当i==j时,找到界定点,退出循环
if(a[i]>a[j]){//如果前面的数大于后面的数,说明逆序,需要调换
int temp = a[i];
a[i]=a[j];
a[j]=temp;
flag=!flag;
}
if(flag) i++;
else j--;
}
quickSort(a,low,i-1);//递归调用左半数组
quickSort(a,j+1,high);//递归调用右半数组
}
}