快速排序选择“基准数”时,若选取左右两端的数,在数组是有序的情况下,时间复杂度会退化为O(N^2),和冒泡排序一样了。
所以,选取基准数时,可选取中间的数,避免这种情况。
void quicksort(int left, int right)//快排实质:基准数归位
{
int i, j, temp, t;
temp = a[(left+right)/2];//基准数
i = left;
j = right;
while (i < j)
{
while (a[j] > temp)
j--;
while (a[i] < temp)
i++;
//交换两数位置
if (i <= j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
i++, j--;
}
}
//递归
if (left < j) quicksort(left, j);//左半边
if (right > i) quicksort(i, right);//右半边
}