快速排序算法Java实现
快速排序分以下几步走:
1.选择数组中第一个数作为基数
2.将小于基数的值放在数组左侧,大于基数的值放在右侧
3.对基数左右两边的数分别重复上面步骤,直到每个子集中只有一个数,即完全有序
将数组第一个数23赋给temp变量,指针 i 指向数组第一个元素,指针 j 指向数组最后一个元素
从 j 开始遍历(一定要先从右往左开始遍历),遇到13时,因为13<=temp,因此将arr[j]填入arr[i]中,即此时指针 i 指向的数为13;
再从 i 遍历(从左往右),遇到45时,因为45>temp,因此将arr[i]填入arr[j]中,此时指针 j 指向的数为45;
继续从 j 遍历,遇到11时,因为11<temp,因此将arr[j]填入arr[i]中,即此时指针 i 指向的数为11;
从 i 遍历,遇到89时,因为89>temp,因此将arr[i]填入arr[j]中,此时指针 j 指向的数为89;
从 j 遍历,遇到17时,因为17<temp,因此将arr[j]填入arr[i]中,即此时指针 i 指向的数为17;
从 i 遍历,遇到72时,因为72>temp,因此将arr[i]填入arr[j]中,此时指针 j 指向的数为72;
从 j 遍历,遇到3时,因为3<temp,因此将arr[j]填入arr[i]中,即此时指针 i 指向的数为3;
从 i 遍历,遇到26时,因为26>temp,因此将arr[i]填入arr[j]中,此时指针 j 指向的数为26;
从 j 遍历,和 i 重合;
当i=j时,将 temp(基准数23)填入arr[i]中。
此时完成算法的第2个步骤,接下来将23左边和右边的子区间分别用以上方法进行排序,直到区间只有一个元素即排序完成。
代码如下:
public class quickSort {
public static void main(String[] args) {
int[] array = {23,45,17,11,13,89,72,26,3,17,11,13};
sort(array,0,array.length - 1);
for (int i : array) {
System.out.print(i+" ");
}
}
public static void sort(int[] nums,int low,int high){
if (low < high) {
int i = low;
int j = high;
int pivot = nums[low]; // 第一个数作为基准数
while (i < j) {
// 一定要先从右向左
while ((i < j) && (nums[j] >= pivot)) {
j--;
}
// 此时nums[j]小于pivot 换到前面
nums[i] = nums[j];
while ((i < j) && (nums[i] <= pivot)) {
i++;
}
// 此时nums[j]大于pivot 换到后面
nums[j] = nums[i];
}
//将基准元素填入相应位置
nums[i] = pivot;
sort(nums,low,i - 1);
sort(nums,i + 1,high);
}
}
}
图文参考链接:https://blog.csdn.net/elma_tww/article/details/86164674