首先推荐一篇大佬的文章http://t.csdn.cn/Jrd7j
本篇笔记就是根据上面的这篇文章而进行的模仿
利用哨兵法进行快速排序
- 首先定义两个指针(哨兵)left,right
- 利用左右的两个指针的变化确定一个最值(具体变化如下)
- 首先将第一位作为一个目标位,
- 从右边开始找比它小的值
- 从左边开始找比它大的值
- 找到之后就交换两个的位置
- 然后继续,直到左边的指针等于或者大于右边的指针时停止
- 这样就找到了第一个数字,它的左边都比它小,右边都比它大
- 然后数组就会划分为两个区间
- 然后对两个区间再次执行以上的操作
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 6, 10, 8};
quickSort(arr);
System.out.println(Arrays.toString(arr));
}
static void quickSort(int[] arr) {
quickSort(arr, 0, arr.length - 1);
}
static void quickSort(int[] arr, int left, int right) {
// 递归结束条件
if (left >= right) {
return;
}
int l = left;
int r = right;
int num = arr[left];
while (left < right){
while (arr[right] >= num && left < right) {
right --;
}
while (arr[left] <= num && left < right) {
left ++;
}
if (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
arr[l] = arr[left];
arr[left] = num;
// 对左边进行快排
//quickSort(arr, l, left - 1);
// 对右边进行快排
//quickSort(arr, left + 1 , r);
}
}