快速排序的一些简单理解
前言
这几天做题的时候,做到一道排序题,用冒泡排序去做显示运行时间过长,后面用快排做的时候,通过了,下面就简单说下自己对快排的理解
快速排序的步骤:
1.把数组中的一个数当作基准数,一般会把数组中最左边的数当作基准数,然后从两边进行检索,先从右边往左检索比基准数小的,再从左边向右检索比基准数大的,如果检索到了,就停下,然后两个元素交换位置(这里从左往右检索成为i,右往左成为j)
2.交换完成,然后按照1中的步骤继续检索,直到i和j相遇,就停止检索。把基准数和相遇位置的元素交换。此时第一轮排序结束,此时数组基准数左边全部小于基准数,右边全部大于基准数
类似于这样{1,4,5,3,6,9,7,8,10},可以看出6左边的数全部小于6,右边的数全部大于6
3.第二轮排序开始,可以把6左右的元素看成是两个数组{1,4,5,3}和{9,7,8,10},方式和第一轮一样进行排序,先排基准数左边再排基准数右边
4.接下来递归前面几步。
代码示例:
// left表示左边索引,right表示右边索引
public static void quickSort(int[] array,int left,int right){
//如果左边索引大于右边索引,直接return结束方法
if (left > right){
return;
}
// 以第一个元素作为基准数
int base = array[left];
// 变量i,指向最左边的数
int i = left;
int j = right;
// 当i=j的时候,就不能再排了
while (i!=j){
//先由j从右往左检索,检索到比基准数小的,就停下,也就是说,检索到比基准数大的或相等的数,就继续检索
// i= base&& i