文章目录
快速排序的时间复杂度
最坏 | 最好(一般情况下) |
---|---|
O(n^2) | O(nlogn) |
快速排序的代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e5+10;
int arr[N];
void quick_sort(int arr[],int l,int r){
if(l>=r)return;
int x=arr[l+r>>1],i=l-1,j=r+1;//减一的目的是 方便下面对称
//x 可以取 任何值 但是 取最左边 或者最右边 那么就可能 出现问题
//所以 取中间 或者随机取 是最好的
while(i<j){
do i++;while(arr[i]<x);
do j--;while(arr[j]>x);
if(i<j)swap(arr[i],arr[j]);
}
//快速排序 是先把大于和小于x的放在两边 再递归下去 重复操作
quick_sort(arr,l,j);
quick_sort(arr,j+1,r);
return ;
}
int main(){
int a;
cin>>a;
for(int i=0;i<a;i++){
cin>>arr[i];
}
quick_sort(arr,0,a-1);
for(int i=0;i<a;i++){
cout<<arr[i]<<" ";
}
}
原理
最坏的情况是出现在 当这个需要排序的数组是从大到小 那么每次都需要交换两个数 则就和冒泡排序一样 一个一个的找。
一般数组是乱序的 那么就是nlogn。
每次找完就跟着递归下去
点个赞吧