有问题的快速排序
#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块拿去吧