目录
1.理解
快速排序是冒泡排序的变种,提高了效率。
2.动态可视化
https://visualgo.net/zh/sorting
3.静态示例
4.实现
public class QuickSort {
public static void quickSort(int[] arr,int startIndex,int endIndex){
// 判断结束条件
if(startIndex >= endIndex) {return; }
// 获取基准点的位置
int partition = partition(arr, startIndex, endIndex);
// 根据基准点分成两部分进行递归
quickSort(arr,startIndex,partition-1);
quickSort(arr,partition+1,endIndex);
}
*/**
* 分制(双边循环法)
* @param arr
* @param startIndex
* @param endIndex
* @return
*/ *
private static int partition(int[] arr,int startIndex,int endIndex){
//获取第一个元素的基准位置
int pivot = arr[startIndex];
int left = startIndex;
int right = endIndex;
while (left != right) {
// 控制right 向左移动
while (left < right && arr[right] > pivot ){right--; }
//控制left 向右移动
while (left < right && arr[left] <= pivot ){ left++; }
// 如果出现左右指针需要交换的数据,就进行交换
if (left < right){
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
// 到这里证明这除了选出接单位置后,其他的部分已经按照左右指针分出 大于和小于基准点的部分
arr[startIndex] = arr[left];
arr[left] = pivot;
return left;
}
public static void main(String[] args) {
int[] arr = new int[] {4,7,3,5,6,2,8,1};
quickSort(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
}
5.是否是稳定的
是