用到的方法:递归,分治策略
代码主体:
import java.util.Arrays;
//快速排序
public class kuaisupaixv {
public static void main(String[] args) {
//定义要排序的数组
int [] ary={5,78,21,951,41,4125};
System.out.println(Arrays.toString(ary));
//调用封装的递归函数,给调用的封装赋值
kuaipai(ary,0, ary.length-1);
//输出
System.out.println(Arrays.toString(ary));
}
//封装递归函数
public static void kuaipai(int []ary,int zuo,int you){
//这个if是递归结束的判断,如果两个指针相等就结束递归
if(zuo<you) {
//定义low和hight为两个指针,low从左到右,hight从右到左
int low = zuo, hight = you;
//把左边第一个数当作基准数保护起来
int base = ary[low];
//当两个指针没相遇时循环
while (low < hight) {
//当两个指针没相遇且右边指针的数大于基准数时
while (low < hight && ary[hight] > base) {
//右边指针向左移动一位
hight--;
}
//否则就将右边指针的数赋给左指针
ary[low] = ary[hight];
//当两个指针没相遇且左边指针的数小于基准数时
while (low < hight && ary[low] < base) {
//左指针向右移一位
low++;
}
//否则将左指针的数赋给右指针的
ary[hight] = ary[low];
}
//当两个指针相遇时,将基准数赋给两指针同时指向的数
ary[low] = base;
//用递归的方法继续做排好位置的基准数左边的数
kuaipai(ary, zuo, low - 1);
//用递归的方法继续做排好位置的基准数右边的数
kuaipai(ary, low + 1, you);
}
}
}
输出结果:
[5, 78, 21, 951, 41, 4125]
[5, 21, 41, 78, 951, 4125]
Process finished with exit code 0
原文链接: https://blog.csdn.net/daibadetianshi/article/details/137179823