快速排序复杂度:O(nlogn)
算法思路
依然采用递归的思想,首先选数组第一个元素作为分割点,将其余元素按照大于它和小于它分为两种(partition),利用元素交换将分割点元素置于分界线位置。递归地使用partition过程。最终实现快速排序。
#include<iostream>
using namespace std;
template <typename T>
int partition(T arr[],int left,int right){
T v=arr[left];
int j = left;
for(int i=left+1;i<=right;i++){
if(arr[i]<v)
swap(arr[++j],arr[i]);
}
swap(arr[left],arr[j]);
return j;
}//partition过程
template<typename T>
void quickSort(T arr[],int left,int right){
if(left>=right)
return;
int p = partition(arr,left,right);
quickSort(arr,left,p-1);
quickSort(arr,p+1,right);
}//递归
template <typename T>
void QuickSort(T arr[],int n){
quickSort(arr,0,n-1);
}