package 排序算法;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = new int[] {3,4,7,6,2,7,2,8};
quickSort(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr ,int start, int end) {
//寻找一个数作为标准数
int stard = arr[start];
//记录需要排序的下标
int low = start;
int high = end;
//循环找比标准数大的数和比标准数小的数
while(low<high) {
//右边的数比标准数大
while(low<high&&stard<=arr[high]) {
high--;
}
//使用右边的数字替换左边的数字
arr[low] = arr[high];
//如果左边的数字比标准数小
while(low<high && arr[low]<=stard) {
low++;
}
arr[high] = arr[low];
//把标准数赋值给最低所在的位置
arr[low] = stard;
//处理所有的小的数字
quickSort(arr, start, low);
//处理所有的大的数字
quickSort(arr, low+1, end);
}
}
}
快速排序的原理:
把第一个数作为标准数stard,小于标准数的数字放在左边,大于标准数的数字放在右边。
(相当于把原数组分割成两段,第一段是0----标准数,第二段是标准数+1---arr.length-1)
然后对两段数组进行一次递归调用,完成排序
如何按照标准数,分为左右两段?
可以理解为挖坑法。
3 | 4 | 7 | 6 | 2 | 7 | 2 | 8 |
4 | 7 | 6 | 2 | 7 | 2 | 8 |
2 | 4 | 7 | 6 | 2 | 7 | 8 |
2 | 7 | 6 | 2 | 7 | 4 | 8 |
然后又从右边开始判断,以此类推,最后得出
2 | 2 | 6 | 7 | 7 | 4 | 8 |
把标准数填入坑内
2 | 2 | 3 | 6 | 7 | 7 | 4 | 8 |
然后执行两次递归,解决问题。
扫描二维码关注公众号,回复:
11647190 查看本文章