void qsort(int* array,int size)
{
if(size<=1)
return;
int* pEnd=array+size-1;
int* pBegin=array;
while(pEnd!=pBegin)
{
while(*pEnd>=*pBegin&&pEnd>pBegin)
--pEnd;
if(pEnd==pBegin)
break;
swap(pEnd,pBegin);
pBegin++;
while(*pEnd>=*pBegin&&pEnd>pBegin)
++pBegin;
if(pEnd==pBegin)
break;
swap(pEnd,pBegin);
pEnd--;
}
int front_part=pEnd-array;
qsort(array,front_part);
qsort(pEnd+1,size-front_part-1);
}
快速排序,简单来说就是找数组中的一个元素为基准,通过只遍历数组一边的方法,将数组调整成,基准值左边所有元素都不大于基准值,基准值右边所有元素都不小于基准值的状况。然后递归的将基准值左右的两个子数组调整成这种状况。以实现数组的排序
调整的方法:
1.将数组首元素作为基准值
2.从数组未被遍历的部分的尾部向前遍历,找到一个比基准值小的元素,将他与基准值交换位置
3.从数组未被遍历部分的头部向后遍历,找一个比基准值大的元素,将他与基准值交换
4 经过一轮2,3后,左侧被遍历过的位置都保存着不比基准值大的元素,而右侧被遍历过的位置都保存着不比基准值小的元素。循环2,3直到所有的位置都被遍历过,此时基准值左边的值都不大于基准值,而基准值右侧的元素都不小于基准值