//快速排序写法
Class QuickSort{
//最外层快速排序
public static void quickSort(int[] nums,int left, int right){
if(left > right){
return;
}
//第一次循环
int pivotIndex = partition(nums,left,right);
//左边数组递归
quickSort(nums,left,pivotIndex-1);
//右边数组递归
quickSort(nums,pivotIndex+1,right);
}
//哨兵分割写法
public static int partition(int[] nums, int left, int right){
if(i > j){
return;
}
//初始化哨兵算法里面的变量,分割数是数组第一个数
int i = left;
int j = right;
int pivot = nums[left];
while(i < j){
//这里必须等于,要不然哨兵数也会被交换
//当i<j的时候,且发现右边指针的元素大于哨兵元素
if(i < j && nums[j] >= pivot){
--j;
}
//左边元素小于哨兵元素
if(i < j && nums[i] =< pivot){
++j;
}
//发现要交换的元素
swap(nums,i,j);
}
//完成循环,把哨兵数换到i上面
//因为left已经是哨兵数了,第一次交换的时候left下标上面的数是不会变的
swap(nums,left,i)
}
//交换数组元素
public static int swap(int[] nums,int i, int j){
int swap = nums[j];
nums[j] = nums[i];
nums[i] = swap;
}
}
算法笔记 手写快排
最新推荐文章于 2024-10-17 11:39:06 发布