快速排序思想:
1.先确定一个分界点x
2.排序:
x左边都是小于等于x的
x右边都是大于等于x的
3.递归
方法1:
建立两个数组,p , q
确定x后遍历原始数组num,小于x的放入p,大于x的放入q;
再重新放入num中
方法2:
确认两个指针l , r分别指向num的头和尾,确认一个分界点x
当num[l] < x 时,l++,不满足条件则停止
当num[r] > x时,r--,不满足条件则停止
交换num[l],num[r]
继续递归
package cn.liyi.day01;
public class Demo785 {
public static void main(String[] args) {
int[] num = new int[]{3, 1, 2, 4, 5};
int l = 0, r = num.length - 1;
quickSort(num, l, r);
for (int i = 0; i < 5; i++) {
System.out.print(num[i]);
}
}
public static void quickSort(int[] p, int l, int r) {
if (l >= r)
return;
int x = p[l], i = l - 1, j = r + 1;
while (i < j) {
do {
i++;
} while (p[i] < x);
do {
j--;
} while (p[j] > x);
if (i < j) {
int swap = p[i];
p[i] = p[j];
p[j] = swap;
}
}
quickSort(p, l, j);
quickSort(p, j + 1, r);
}
}