对于无序的未经排序数组A[N],首先需要选择一个基准,这个基准是随意选的。给两个变量,一个从数组尾部利用数组下标开始迭代,一个从数组头部开始迭代。一个从数组头部开始迭代的数组遇到比基准数大的时候停止,保存变量。一个从数组尾部开始迭代的数组遇到比基准数小的时候停止,保存变量。交换上述两个变量继续迭代,当两个下标重合时停止迭代。此时将基准数与重合的下标进行交换,这个时候基准数左边的数都比基准数小。基准数右边的数都比基准数大。也就是这个基准数找到了他正确的位置。那么快速排序一次至少可以使一个基准数归位。最后对左方数组使用递归,对右方数组使用递归。快速排序的巧妙之处在于他一次排序两个位置,效率很高。与冒泡排序相比,他临时变量只多用了一个,都属于比较省空间的排序方法。是一种不稳定的排序方法。c++代码如下:(形参使用引用数组,直接修改外部数组顺序,在大型程序方面引用比指针更有优势,指针容易越界)
void quicksort2(int left,int right,int (&ab)[N])
{int i,j;
int temp,temp2;
i=left;
j=right;
temp=ab[left];
if(left>right)
return;
while(i!=j)
{
while(ab[j]>=temp&&i<j){j--;}
while(ab[i]<=temp&&i<j){i++;}
if(i<j)
{temp2=ab[i];
ab[i]=ab[j];
ab[j]=temp2;}
}
ab[left]=ab[i];
ab[i]=temp;
quicksort2(left,i-1,ab);
quicksort2(i+1,right,ab);
}