快速排序的代码找不出问题所在

来源:百度知道 编辑:UC知道 时间:2024/06/02 19:56:38
这是我的代码,运行的时候排序不对。。可是我又找不到哪出错了,请大家帮我看看,我想知道错在哪里。
int left=0;
int right=n-1;
void ChemistrySort(RECNODE *r,int left,int right) //对化学成绩排序(快速排序)
{

int i,j;
i=left,j=right;
RECNODE temp;
if(left<right)
{
temp=r[left]; //将第一个记录作为基准存入临时单元
while(i!=j) //从序号两端交替向中间扫描,知道i=j为止
{
while(j>i&&r[j].score[3]>=temp.score[3])
j--; //从右向左扫描,找第一个关键字小于temp.score[3]的r[j]
if(i<j) //若找到这样的r[j],将r[j]放到r[i]处
{
r[i]=r[j];
i++;
}
while(i<j&&r[i].score[3]<=temp.score[3])
i++; //从左向右扫描,找第一个关键字大于temp.score[3]的r[i]
if(i<j) //若找到这样的r[i],将r[i]放到r[j]处
{
r[j]=r[i];
j--;
}
}
r[i]=temp; //将基准放入其最终位置
ChemistrySort(r,left,i-1); //对基准前面的记录序列进行递归排序
ChemistrySort(r,i+1,right); //对基准后面的记录序列进行递归排序

}
}
为什么要把i<j改为i+1&

if(i<j) //若找到这样的r[j],将r[j]放到r[i]处
改为
if(i+1<j)

while(j>i&&r[j].score[3]>=temp.score[3])
j--; //从右向左扫描,找第一个关键字小于temp.score[3]的r[j]
if(i<j) //若找到这样的r[j],将r[j]放到r[i]处
{
这里错了