快速排序算法(图文并茂)
快速排序/快排
首先理解算法思路
由于不打算自己再画图,图作者为:https://blog.csdn.net/nrsc272420199/article/details/82587933
- 假设最开始的基准数据为数组第一个元素23,则首先用一个临时变量去存储基准数据,即tmp=23;然后分别从数组的两端扫描数组,设两个指示标志:low指向起始位置,high指向末尾.
- 先从后半部分开始,如果扫描到的值大于基准数据就让high减1,如果发现有元素比该基准数据的值小(如上图中18<=tmp),就将high位置的值赋值给low位置 ,结果如下:
- 后开始从前往后扫描,如果扫描到的值小于基准数据就让low加1,如果发现有元素大于基准数据的值(如上图46=>tmp),就再将low位置的值赋值给high位置的值,指针移动并且数据交换后的结果如下:
- 然后再开始从后向前扫描,原理同上,发现上图11<=tmp,则将high位置的值赋值给low位置的值,结果如下:
- 然后再开始从前往后遍历,直到low=high结束循环,此时low或high的下标就是基准数据23在该数组中的正确索引位置.如下图所示.
个人理解
我觉得就是随便抽个数,然后把小于他的放左边,大于他的放右边去,做这个过程采用哨兵模式,左边一个哨兵,右边一个哨兵,都往中间走,一直到哨兵重合,那么就是最中间的点了,再把那个抽到的数放在这个重合点,这样这个数的左边的都是小的数,右边的都是大的数,然后对左边的递归做这个操作,对右边的递归做这个操作,最后就完成了排序。
代码来理解
- 代码(简洁版)
public static void quickSort(int[] array,int low,int high){
if(high>low){
int i=low,j=high;
int temp=array[low];
while (low!=high){
while (high>low && array[high]>=temp) {
high--;
}
array[low]=array[high];
while (low<high && array[low]<=temp){
low++;
}
array[high]=array[low];
}
array[low]=temp;
quickSort(array,i,low-1);
quickSort(array,low+1,j);
}
}
- 代码(带提示完整版本)
package sort;
/**
* @author humorchen
*/
public class QuickSort {
public static void quickSort(int[] array,int low,int high){
if(high>low){
int i=low,j=high;
int temp=array[low];
System.out.println(String.format("取下标为 %d 的数 %d 为对比数",low,temp));
while (low!=high){
print(array);
while (high>low && array[high]>=temp) {
high--;
}
System.out.println(String.format("在右边往左边找比对比数小的数,找到了array[%d] 的数 %d ,把这个数放到array[%d]对比数的位置那去",high,array[high],low));
array[low]=array[high];
print(array);
while (low<high && array[low]<=temp){
low++;
}
System.out.println(String.format("在左边往右边找比对比数大的数,找到了array[%d]的数 %d ,把这个数放到array[%d]刚找到的大于对比数的位置那去",low,array[low],high));
array[high]=array[low];
print(array);
}
System.out.println("把对比数放到最中间");
array[low]=temp;
print(array);
System.out.println(String.format("将对比数array[%d]=%d 两边递归做处理",low,array[low]));
quickSort(array,i,low-1);
quickSort(array,low+1,j);
}
}
public static void print(int[] array){
System.out.println("打印现在的数据");
for(int t:array){
System.out.print(t+" ");
}
System.out.println();
}
public static void main(String[] args) {
int[] array={3,4,2,5,6,1,3,7};
quickSort(array,0,array.length-1);
print(array);
}
}
本文来自博客园,作者:HumorChen99,转载请注明原文链接:https://www.cnblogs.com/HumorChen/p/18039663