标题:有问题的快速排序
只看楼主
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
 问题点数:0 回复次数:3 
有问题的快速排序
#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 关键字 
2005-03-31 11:46
lntuzjc
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2005-3-23
得分: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-1); /*只有这个地方有问题,数组下标应该从0开始,但是最大呢?只能是r1->len-1!!!*/ printf("\n"); for(i=0;i<6;i++) printf("%d",r1->vec[i]); }
2005-03-31 16:11
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
得分:0 
没什么好说的:  赏金200!

2005-03-31 16:23
lntuzjc
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2005-3-23
得分:0 
我可不是为了你的200块哟!
2005-03-31 21:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-14464-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.054724 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved