当前位置: 代码迷 >> C语言 >> 有问题的快速排序
  详细解决方案

有问题的快速排序

热度:108   发布时间:2005-03-31 11:46:00.0
有问题的快速排序
#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  关键字  

----------------解决方案--------------------------------------------------------
#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块哟!

----------------解决方案--------------------------------------------------------
  相关解决方案