您的位置:首页 > 编程语言

每日编程2之快速排序

2013-02-23 10:49 113 查看
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元素
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: