快速排序的时间复杂度O(nlogn)
思想:
首先设置一个临时的变量temp用以存放A[left]的值;
然后设置两个指针left和right,分别指向数组的左侧和右侧;
从数组的右侧开始,如果A[right]<temp的值,那么不断将right的指针向左移动,当A[right]与left处指针指向的值相等时,交换这两个值的位置;
从数组的左侧开始,如果A[left]>temp的值,那么不断的将left的指针向右移动,当A[left]与right处指针指向的值相等时,交换这两个值的位置;
然后把temp放到left与right相等的位置后,返回left的指针位置。A【left】又被成为主元;
代码:
int partition(int A[], int left, int right)
{
int temp = A[left];
while(left < right)
{
while(left < right && A[right] >= temp)
{
right--;
A[right] = A[left];
}
while(left < right && A[left] <= temp)
{
left++;
A[left] = A[right];
}
}
A[left] = temp;
return left;
}
void quicksort(int A[], int left, int right)
{
if(left < right)
{
int pos = partition(A, left, right);
quicksort(A, left, right-1);
quicksort(A, left+1, right);
}
}