1、基本思想。选择一个基准元素,通常是第一个元素或者最后一个元素,通过一趟扫描,将待排序元素分为两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序的正确位置,然后再用同样的方法递归的排序划分的两部分。
2、实现。
/**
* @brief getPosition 快速排序算法的辅助函数
* 以第一个元素为基准元素,将所有小于基准元素的元素移到基准元素前面
* 将大于等于基准元素的元素移到基准元素后面
*
* @param array 数组首地址
* @param first 数组第一个元素的位置
* @param last 数组最后一个元素的位置
* @return 基准元素在排好序后的数组中的位置
*/
int getPosition(int* array,int first,int last)
{
int i=first;
int j=last;
int tempSave=array[first];
while (i<j)
{
while(i<j&&array[j]>=tempSave)
j--;
if(i<j)
{
array[i++]=array[j];
}
while(i<j&&array[i]<tempSave)
i++;
if(i<j)
{
array[j--]=array[i];
}
}
array[i]=tempSave;
return i;
}
void quickSort(int* array,int first,int last)
{
if(first<last)
{
int pos=getPosition(array,first,last);
quickSort(array,first,pos-1);
quickSort(array,pos+1,last);
}
}
int main()
{
int a[10]={11,42,53,25,36,6,75,8,26,4};
std::cout<<"before sort:"<<std::endl;
for(int i=0;i<10;++i)
std::cout<<a[i]<<"\t";
std::cout<<std::endl;
quickSort(a,0,9);
std::cout<<"after sort:"<<std::endl;
for(int i=0;i<10;++i)
std::cout<<a[i]<<"\t";
std::cout<<std::endl;
return 0;
}
3、运行结果。