ps:图片来自百度。

建议先去百度看核心思想:百度:快速排序算法

快排在应试的时候有可能会被拿出来当考题,所以说有必要去学习。

c++实现:

#include<bits/stdc++.h>
using namespace std;
void Swap(int &a,int &b){
	if(a==b)
	return ;                                    //交换
	a=a+b;
	b=a-b;
	a=a-b;
}
void Q_sort(int a[],int head,int tail){     //数组a的地址,head:第一个元素下标,tail:最后一个元素下标
    if(tail<=head)                           	//这时候已经是有序的
        return;
        
    int pivot=a[head];                        	//轴:pivot.为第一个元素下标
    int left=head+1;                         	//left:第二个元素的下标
    int right=tail;
    
    
    while(left<=right){
        while(right>=left&&a[right]>pivot)    //从右往左找,元素大于轴的值,则跳过,right值减1,(继续往左找)
            right--;                          //直到找到一个比head小的,退出,这时候right停在了那个元素的下标
											  //while要保证left值小于等于right值


	while(left<=right&&a[left]<pivot) 	  //从左往右找,元素小于轴的值,则跳过,left值减1,(继续往右找)
            left++;                           //直到找到一个比head大的,退出,这时候left停在了那个元素的下标
											  //while要保证left值小于等于right值
											  
        if(left>=right)                  	  //已经是相对有序(较大的在右边,较小的在左边),不用交换
            break;

        Swap(a[left],a[right]);          //交换:之前找到的往右小于轴的值,和,之前找到的往左大于轴的值。

        left++,right--;                       //缩进一位,继续找。
    }
    
    
       a[head]=a[right];               //跳出while的时候,没有缩进,right位置就是右边第一个小于轴的,

	a[right]=pivot;                    //left的位置就是左边第一个大于轴的
		                      //这时候把右边那个小于轴的值当做下次排序的轴,并把上次的轴放在right那里
    
    Q_sort(a,head,right-1);               //a[head](上次的a[right])为下次(左边)的轴,左半部分继续排序(递归)
    Q_sort(a,left,tail);                   //a[left]为下次(右边)的轴,右半部分继续排序
}
int main(){
	int a[100];
	int n;
	cout<<"请输入数组元素数量"<<endl;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	Q_sort(a,0,n-1);
	for(int i=0;i<n;i++){
	   cout<<a[i]<<" ";
	}
	return 0;
}