易码技术论坛

 找回密码
 加入易码
搜索
查看: 599473|回复: 19

[求助]谁能帮我做一个排序函数?(LAVA的)

[复制链接]
发表于 2007-1-20 16:33:35 | 显示全部楼层
很好写啊,Qsort要不要
发表于 2007-1-20 16:45:10 | 显示全部楼层
刚刚随手写的,对A数组进行排序,自己根据你的需要改改吧
该算法复杂度是 O(n*log2n)应该可以满足你的需要了,比这快的没什么好算法了
  1. long a[10];
  2. long r;
  3. void qsort(int x,int y)
  4. {
  5. long i,j,k,t;
  6. i=x;j=y;
  7. k=a[(x+y)/2];
  8. do
  9. {
  10.    while (a[i]<k){i++;}
  11.    while (a[j]>k){j--;}
  12.    if (i<=j)
  13.     {
  14.       t=a[i];
  15.       a[i]=a[j];
  16.       a[j]=t;
  17.       i++;j--;
  18.     }
  19. }
  20. while (i<=j)
  21. if (j>x) qsort(x,j);
  22. if (y>i) qsort(i,y);
  23. }
  24. void main()
  25. {
  26.   a[1]=1;
  27.   a[2]=3;
  28.   a[3]=5;
  29.   a[4]=7;
  30.   a[5]=9;
  31.   a[6]=2;
  32.   a[7]=4;
  33.   a[8]=6;
  34.   a[9]=8;
  35.   a[10]=0;
  36.   qsort(1,10);
  37.   for (r=1;r<=10;r++)
  38.   {
  39.     printf("%d\n",a[r]);
  40.     getchar();
  41.   };
  42. }
复制代码
发表于 2007-1-20 16:49:25 | 显示全部楼层
简单点就冒泡法
发表于 2007-1-20 16:51:27 | 显示全部楼层
这是我根据我的一贯写pascal的风格改过来的,也许有不科学的地方,void main里面很多语句是为了测试程序的正确性的,qsort(x,y)才是主要函数,x是排序的起始位置y是终止位置,好象只能对数组从第一个元素开始排序,要用到你的程序里需要把qsort里面的a改成你的变量,因为我不知道如何定义lavaX的函数实际参数所以只能对全局数组进行排序了,将就下算了
发表于 2007-1-20 16:54:20 | 显示全部楼层
冒泡倒是比较简单3行就搞定了,只是效率低了点。。。
  for (i=1;i<=n;i++)
    for (j=i+1;j<=n;j++)
      if a<a[j] then {t=a;a=a[j];a[j]=t;}
要怎样的自己选吧
 楼主| 发表于 2007-1-21 10:40:54 | 显示全部楼层
2楼的不行啊,7排不出,而且有重复数字就死机!!!
发表于 2007-1-22 10:09:18 | 显示全部楼层
好象是打错了几个地方
晕,在完整版居然进不来这个主题,害我在无图版进,就直接回复没有修改原来的
上次在记事本写的,没调试
啊,上课了~~~~~闪

qsort.txt

1 KB, 下载次数: 119

快速排序的源代码

发表于 2007-1-22 12:46:30 | 显示全部楼层
贴代码会走样,直接发文件~
发表于 2007-1-22 12:57:41 | 显示全部楼层
哦,对不起,那是课间10分中发的,来不及了
走样是指会吃代码么?啊,果然
发表于 2007-1-23 21:42:24 | 显示全部楼层
lz啊,这可不行啊……=.=
找本书看看,基本的排序算法还是应该会的。
发表于 2007-1-25 09:26:16 | 显示全部楼层
貌似老谭的C程序设计上就有排序的例子的......
发表于 2007-1-25 09:55:31 | 显示全部楼层
走样是指
比如[ i]
如果没有空格的话.....
就变成这样了
发表于 2007-1-25 10:53:40 | 显示全部楼层
速度够用的话还是用冒泡法吧,代码少而且易懂不易出错。
算法没必要记牢,搜集到代码,需要的时候复制粘贴即可。记住,你是程序员,不是数学系学生。
 楼主| 发表于 2007-1-25 12:43:13 | 显示全部楼层
楼上的经典!
发表于 2007-1-25 13:58:34 | 显示全部楼层
……假如你想要学习新知,那么就努力。假如不想,也可以找出很多理由,譬如lss的理由。能写代码的人,脑子是足够用的,所以多学一点没什么。

况且,一般的排序算法并不是什么高深的东西。所谓不容易出错,“无他,唯手熟尔。”
算法没必要记牢,搜集到代码,需要的时候复制粘贴即可。记住,你是程序员,不是数学系学生。
呵呵,我就不多评论了,这属于经典言论,但是有两句话不得不说:
1、数学系的学生才不care什么算法,他们更多东西要学。用“计算机系学生”来举例子可能更贴切。
2、想偷懒总是可以找到理由的,想努力亦可以,看心态了。
发表于 2007-1-25 14:07:45 | 显示全部楼层
天下有学不完的知识。
没必要去写每一个函数,要学会利用现成的代码。
发表于 2007-1-25 17:03:17 | 显示全部楼层
一个排序算法而已,离“天下所有的知识”远的很。
学得完的。
发表于 2007-1-27 18:06:36 | 显示全部楼层
用QSORT不错,用堆排,树排也可以,稳定性差点且代码比较复杂;用折半,顺序,选择,希尔速度慢点,稳定性好些,代码比较好写;具体代码可以去网上搜一下,上面提到的排序方法都是比较老的,一定找的到
发表于 2007-3-23 19:51:06 | 显示全部楼层
结合lz的实际用途
 楼主| 发表于 2007-1-20 16:19:30 | 显示全部楼层 |阅读模式
  能在lava1.0平台上运行,速度不要太慢,至少128个数据不要超过5s吧
允许原数列有重复数字
能从大到小排序
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-24 05:57 , Processed in 0.012307 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表