快速排序的递归实现
#include<iostream>
#include<algorithm>
using namespace std;
int partition(int arr[],int left,int right){
int tem=arr[left];
while(right>left){
while(arr[right]>tem&&right>left) right--;
arr[left]=arr[right];
while(arr[left]<tem&&right>left) left++;
arr[right]=arr[left];
}
arr[left]=tem;
return left;
}
void Quicksort(int arr[],int left,int right){
if(right>left){
int mid=partition(arr,left,right);
Quicksort(arr,left,mid-1);
Quicksort(arr,mid+1,right);
}
}
int main(){
int arr[]={9,8,7,6,5,4,3,2,1,0};
Quicksort(arr,0,9);
for(int i=0;i<10;i++)
cout<<arr[i];
return 0;
}
快速排序算法当序列中元素的排列比较随机时效率较高,但当序列中元素接近有序时,会达到最坏时间复杂度n2,有一个解决办法是不再将第一个元素设置为主元而是随机选取中间的某个数,这样复杂度将稳定在nlogn