前言
快速排序是一种很重要的排序算法,我花了不少时间去理解并总结它,希望可以通过图文的方式让你快速理解快速排序,并能手撸一个快排。
快速排序简介
快速排序是一种很不错的排序算法,算法复杂度为n*logn。快排使用了分而治之的思想,每次排序是都找到一个基准(我们学习时经常使用第一个作为基准),然后把小于基准的元素放到基准元素的左边,大于基准的元素放到基准元素的右边,这样一次排序下来,基准元素左边都是小于(等于)基准的数,基准右边的元素都是大于(等于)基准的元素了。快速排序关键点就是找到这样一个基准并将其放到恰到的位置。
算法思路
定义一个快速排序函数,arr是要排序的数组,l指向要排序的数组最左边的元素,r指向要排序的数组最右边的元素。
public static void quick_sort(int arr[],int l,int r){
if(l >= r) return;
//p为快速排序返回的基准的位置
int p = partition2(arr,l,r);
//对基准左边的数进行快排
quick_sort(arr,l,p-1);
//对基准右边的数进行快排
quick_sort(arr,p+1,r);
}
那么现在关键就是这么实现这个partition2
函数
假设现在有一个数组arr[]: