快速排序的核心思想是分治法,首先定义2个指针,left和right分别指向数组的第一个元素后最后一个元素,还需要一个一个基准值index,来作为比较对象,一般取第一个元素
排序的过程是:在left<right的条件内,从后向前扫描,找到比基准值小的元素放到前面,然后从前往后扫描,将比基准值大的元素放到后面,最后将基准值放到中间,一次排序后,基准值左边都比基准值小,右边都比基准值大
速排序的平均时间复杂度为O(n×log(n)),最糟糕时复杂度为O(n^2);
快速排序是一个不稳定的排序(有两个相同的数A和B,在排序之前A在B的前面,而经过排序之后,B跑到了A的前面,对于这种情况的发生,我们管他叫做排序的不稳定性)
/**
* 快速排序
*/
public class QuickSort {
public static void QuickSort(int [] array,int left,int right){
int index; //记录基准值
if (left<right){
index=sortPass(array,left,right);
QuickSort(array,left,index-1);
QuickSort(array,index+1,right);
int i=array.length;
}
}
//快排分割过程
public static int sortPass(int [] array,int left,int right){
int index=array[left];
while (left<right){
//从后向前扫描,找到比基准值小的
while (left<right&&array[right]>=index) right--;
//将后面的写到前边去
array[left]=array[right];
//从前向后扫描,找到比基准值大的数
while (left<right&&array[left]<=index) left++;
array[right]=array[left];
}
//将基准值放到对应的位置,此时基准值左边都比基准值小
array[left]=index;
return left;
}
}