7.3 快速排序
C++ Codes:
template<class T>
void QuickSort(T vec[],int low, int high)
{
int i=low;
int j=high;
int k=low;
while(low<high)
{
while(k<high&&vec[high]>=vec[k])
--high;
int val1=vec[k];
vec[k]=vec[high];
vec[high]=val1;
k=high;
while(low<k&&vec[low]<=vec[k])
++low;
int val2=vec[k];
vec[k]=vec[low];
vec[low]=val1;
k=low;
}
if(i<k)
QuickSort<T>(vec,i,k-1);
if(k<j)
QuickSort<T>(vec,k+1,j);
}
Python Codes:
def QuickSort(arr,low,high):
i=low
j=high
k=low
while(low<high):
while(k<high and arr[high]>=arr[k]):
high-=1
val=arr[k]
arr[k]=arr[high]
arr[high]=val
k=high
while(low<k and arr[low]<=arr[k]):
low+=1
val=arr[k]
arr[k]=arr[low]
arr[low]=val
k=low
if(i<k):
QuickSort(arr,i,k-1)
if(k<j):
QuickSort(arr,k+1,j)
快速排序在最坏情况下的时间复杂度为O(n的平方),在最好情况下快速排序的时间复杂度为O(nlog2 n),在一般情况下的时间复杂度为O(nlog2 n)。
快速排序是一种不稳定的排序方法。