通俗理解:在数组中随便取一个数k,一般是第一个,然后对数组操作,使小于k的数都在k的左边,大于k的数在k的右边(不考虑相等情况),然后采用分而治之的思想,运用递归函数,最终得到排好序的数组。观看动态过程
void
quick_sort(int *a,int left,int right)
{
int i,j,temp;
if (left < right)
{
i = left;
j = right;
temp = a[i];
while (i < j)
{
while (i<j && a[j]>temp)//向左寻找比temp小的数
j--;
if (i<j)
a[i++] = a[j];
while (i<j && a[i]<temp) //向右寻找比temp大的数
i++;
if (i<j)
a[j--] = a[i];
}
a[i] = temp;
quick_sort(a,left,i-1);
quick_sort(a,i+1,right);//注意参数中没有i,如果改成i,会造成死循环
}
}
最差时间复杂度Ο(n2),平均时间复杂度Ο(n log n)