快速排序设置枢轴


设有一个元素为整数的线性表L,放在A[0.....n]中,设计一个算法以A[n-1]为参考量,使数组左部分小于A[n],右部分大于A[n-1],要求结果仍然保存在数组中。
分析:本题属于快排算法的划分部分。

void Q_partition(int a[],int n)//n是数组的长度
{
    int i,j;
    i=0,j=n-1;
    int temp;
    temp =a[j];
    a[j]=a[i];
    a[i]=temp;
    temp =a[i];
    while(i!=j)
    {
        while(j>i&&a[j]>temp)//从右往左扫找到小于temp的元素
            j--;
        if(i

注:以上解法来自天勤
我的思路:如果仅仅在一趟排序中确定待排元素的位置,可以通过for循环找到小于a[n-1]的元素个数number,然后a[n-1]的值插到a[number]中,后面的元素后移一位。然后在0number-1内找比a[number]大的数将其与在number+1n-1的数进行交换。找到就跳出。

void myPartition(int a[],int n)
{
    int i=0,j=0;
    int number=0;
    int temp;
    for(;inumber;i--)
    {
        a[i+1]=a[i];
    }
    a[number+1]=temp;
    for(i=0;ia[number])
        {
            for(j=number+1;j