基本思想:通过一趟排序将要排序的数据分割成两部分,一部分的所有数据比另一部分的所有数据都要小,然后再按此方法对两份数据分别进行快速排序。
C++版本,时间复杂度O(nlogn)
//快速排序,对冒泡的一种改进
void QuickSort(int *pData,int left,int right)
{
if(left>=right)
{
return;
}
int first = left,last = right;
int key = pData[first];
while(last>first)
{
while(last>first && pData[last]>=key) //由顶至底寻找比key小的数
--last;
pData[first] = pData[last]; //将找到的数放到低端
while(first<last && pData[first]<=key) //由底置顶寻找比key大的数
++first;
pData[last] = pData[first];
}
pData[first] = key; //将中轴放到中间
QuickSort(pData,left,first-1);
QuickSort(pData,first+1,right);
}
Python版本
def QuickSort(pData,left,right):
if(left>=right):
return
first = left
last = right
key = pData[first]
while(first<last):
while(first<last and pData[last]>=key):
last -=1
pData[first]=pData[last]
while(first<last and pData[first]<=key):
first +=1
pData[last]=pData[first]
pData[first]=key
QuickSort(pData,left,first-1)
QuickSort(pData,first+1,right)