请各位高手看看这个快速排序的算法究竟错在哪里了?

来源:百度知道 编辑:UC知道 时间:2024/09/23 10:34:16
#include "stdio.h"
#include "stdlib.h"
#define N 3
typedef struct{
int key;
} seqlist;
int partition(seqlist R[],int i,int j)
{ seqlist t=R[i];
while (i<j)
{ while(i<j && R[j].key>=t.key) j--;

if(i<j)
R[i++]=R[j];
while(i<j && R[j].key<=t.key) i++;

if(i<j)
R[j--]=R[i];
}

R[i]=t;
return i;
}

void quicksort(seqlist R[], int low,int high)
{int part;
while(low<high)
{ part=partition(R,low,high);
quicksort(R,low,part-1);
quicksort(R,part+1,high);
}
}

void main()
{ seqlist R[N];
int i,j;
printf("请选择,1为随机数;0为人工输入:\n");
scanf("%d",&j);
if(j==0)
{ printf("请输入N个数吧!:\n&qu

改动的地方你自己看一下吧, 结果正确了。

#include "stdio.h"
#include "stdlib.h"
#define N 10
typedef struct{
int key;
} seqlist;
int partition(seqlist R[],int i,int j)
{
seqlist t=R[i];

while (i<j)
{
while(i<j && R[j].key>=t.key) j--;
R[i]=R[j];

while(i<j && R[i].key<=t.key) i++;
R[j]=R[i];
}

R[i]=t;
return i;
}

void quicksort(seqlist R[], int low,int high)
{int part;
if(low>= high) return;

part=partition(R,low,high);
quicksort(R,low,part-1);
quicksort(R,part+1,high);

}

void main()
{ seqlist R[N];
int i,j;
printf("请选择,1为随机数;0为人工输入:\n");
scanf("%d",&j);
if(j==0)
{ printf("请输入