每日编程2之快速排序

来源:互联网 发布:九大排序算法 编辑:程序博客网 时间:2024/05/21 17:06

6 4 3 7 5

用变量i记录,(i+1)代表着下一个比pivot大的元素,j对元素序列进行遍历(p<=j<=q-1),当其遍历的元素比pivot小,则交换A[i+1]与A[j]

始终保持i,i+1为序列中小元素,大元素的分界线...

遍历完成后交换A[q]与A[i+1],此时i+1即为A[q]元素的最终位置,

以此为界,形成的二个子序列进行递归,递归结束的条件是p<=q,即只有一个/零个元素的情况


核心代码:

int quickSort(float A[],int p,int q)
{
        if(p<q)
        {
                float pivot = A[q];
                int i = p-1;
                int j;
                for(j=p;j<q;j++)
                {
                        if(A[j]<pivot)  {SWAP(A[i+1],A[j]);     i++;}
                }
                SWAP(A[i+1],A[q]);
                quickSort(A,p,i);
                quickSort(A,i+2,q);
        }
}


编码过程中出现的二个问题:

(1)之前用int pivot而不是float pivot,结果在赋值int pivot=A[q]的时候,浮点数自动取整

(2)在quickSort的排序过程中,交换的发生双方可能是同一个元素(比如A[0]),这就导致程序中的SWAP交换宏不能正常使用,产生很多0元素

原创粉丝点击