有问题的快速排序
#include"stdio.h"#include"string.h"
typedef struct
{ int vec[6];
int len;
}node;
//把r[s]至r[t]的元素进行快速排序
//算法说明:划分交换排序,选第一个记录为基准,使前面的所有记录的关键字值小于或者等于该关键字值,
//而后面的记录的关键字的值均大于该关键字值,此为第一次排序,此后在2组记录中重复上述方法
void PaiXu_KuaiShu(node *r1,int s,int t)//参数:指针,第一个位置,最后一个位置
{ int i=s,j=t,k;
k=r1->vec[s]; //设置划分依据元素
while(i<j) //进行第一次划分
{ while (i<j&&r1->vec[j]>k) j--; //j向左扫描,查找第一个关键字小于k的记录
if(j>i)
{r1->vec[i]=r1->vec[j]; i++;} //交换i,j的元素,并使i指向后一个单元
while(i<j&&r1->vec[i]<=k) i++;//i从左向右扫描,查找第一个关键字大于k的记录
if(j>i)
{r1->vec[j]=r1->vec[i]; j--;}//交换i和j的元素,并使j指向前一个单元
r1->vec[i]=k; //基准k放入最终位置,实现一次划分
if(s<(i-1)) //只用一个记录或无记录是时,无须排序
PaiXu_KuaiShu(r1,s,i-1);//递归处理左区间
if(t>(i+1))
PaiXu_KuaiShu(r1,i+1,t);//递归处理右区间
}
}
main()
{ node *r1;
int x,i,k;
r1=(node*)malloc(sizeof(node));
for(i=0;i<6;i++)
scanf("%d",&r1->vec[i]);
r1->len=6;
PaiXu_KuaiShu(r1,0,r1->len);
printf("\n");
for(i=0;i<6;i++)
printf("%d",r1->vec[i]);
}
//谁能调通就把200块拿去吧
----------------解决方案--------------------------------------------------------
#include"stdio.h" #include"string.h" typedef struct { int vec[6]; int len; }node; //把r[s]至r[t]的元素进行快速排序 //算法说明:划分交换排序,选第一个记录为基准,使前面的所有记录的关键字值小于或者等于该关键字值, //而后面的记录的关键字的值均大于该关键字值,此为第一次排序,此后在2组记录中重复上述方法 void PaiXu_KuaiShu(node *r1,int s,int t)//参数:指针,第一个位置,最后一个位置 { int i=s,j=t,k; k=r1->vec[s]; //设置划分依据元素 while(i<j) //进行第一次划分 { while (i<j&&r1->vec[j]>k) j--; //j向左扫描,查找第一个关键字小于k的记录 if(j>i) {r1->vec[i]=r1->vec[j]; i++;} //交换i,j的元素,并使i指向后一个单元 while(i<j&&r1->vec[i]<=k) i++;//i从左向右扫描,查找第一个关键字大于k的记录 if(j>i) {r1->vec[j]=r1->vec[i]; j--;}//交换i和j的元素,并使j指向前一个单元 r1->vec[i]=k; //基准k放入最终位置,实现一次划分 if(s<(i-1)) //只用一个记录或无记录是时,无须排序 PaiXu_KuaiShu(r1,s,i-1);//递归处理左区间 if(t>(i+1)) PaiXu_KuaiShu(r1,i+1,t);//递归处理右区间 } } main() { node *r1; int x,i,k; r1=(node*)malloc(sizeof(node)); for(i=0;i<6;i++) scanf("%d",&r1->vec[i]); r1->len=6; PaiXu_KuaiShu(r1,0,r1->len-1); /*只有这个地方有问题,数组下标应该从0开始,但是最大呢?只能是r1->len-1!!!*/ printf("\n"); for(i=0;i<6;i++) printf("%d",r1->vec[i]); }
----------------解决方案--------------------------------------------------------
没什么好说的: 赏金200!
----------------解决方案--------------------------------------------------------
我可不是为了你的200块哟!
----------------解决方案--------------------------------------------------------