快速排序基本思想
前言
本人看了AcWing的基础算法之快速排序算法有了一定的体会,所以写了以下的文章
一、快速排序基本内容
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
二、实现的原理
- 找出一个基准值,这个基准值可以是数组的头元素,也可以是尾元素,中间元素或者其他元素
- 设置两个头尾变量l,r,分别指向数组的头尾
- 循环,头指针l往后遍历,尾指针r往前遍历,头指针所指元素如果小于基准元素则l++,尾指针所指元素如果大于基准元素则r–,如果不满足条件则停下来
- 直到头指针所指向的元素大于基准元素,尾指针所指向的元素小于基准元素后,交换这两元素的值
- 递归调用
总的来说,快速排序算法体现了分支思想
三.代码实现
public static void quick_sort(int[] arr,int l,int r){
if(l>=r)return;
int x = arr[l],i = l-1,j = r+1;
while (i<j){
do i++; while (arr[i]<x);
do j--; while (arr[j]>x);
if (i<j){
int t;
t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
quick_sort(arr,l,j);
quick_sort(arr,j+1,r);
}