游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6323|回复: 27

为什么我的快速排序速度那么慢?

[复制链接]

62

主题

296

帖子

302

积分

中级会员

Rank: 3Rank: 3

积分
302
QQ
发表于 2004-10-6 15:40:00 | 显示全部楼层 |阅读模式

  1. void SortFB(int *seq, int start, int end);
  2. #define NUM 40

  3. int main(int argc, char* argv[])
  4. {
  5.         int array[NUM], i;
  6.         char c[2];

  7.         for (i = 0; i < NUM; i++)
  8.                 array[i] = rand();
  9.         printf("\n\n\nArray generated, sorting...");

  10.         SortFB(array, 0, NUM - 1);
  11.         printf("\r");

  12.         for (i = 0; i < NUM; i++)
  13.         {
  14.                 printf("%d\t", array[i]);
  15.                 if ((i + 1) % 9 == 0)
  16.                         printf("\n");
  17.         }
  18.         printf("\n");

  19.         return 0;
  20. }

  21. void SortFB(int *Seq, int start, int end)
  22. {
  23.         if ((end > start) && (end >= 0) && (start >= 0))
  24.         {
  25.                 int pivot = start;
  26.                 int pivotval = Seq[pivot];
  27.                 int i = start, j = end;
  28.                 int p;
  29.                 while (i < j)
  30.                 {
  31.                         while ((i < j) && (Seq[j] >= pivotval))
  32.                                 j--;
  33.                         if (i == j)
  34.                                 break;
  35.                         p = Seq[j];
  36.                         Seq[j] = Seq[pivot];
  37.                         Seq[pivot] = p;
  38.                         pivot = j;
  39.                         i++;
  40.                         while ((i < j) && (Seq[i] <= pivotval))
  41.                                 i++;
  42.                         if (i == j)
  43.                                 break;
  44.                         p = Seq[i];
  45.                         Seq[i] = Seq[pivot];
  46.                         Seq[pivot] = p;
  47.                         pivot = i;
  48.                         j--;
  49.                 }
  50.                 //sort low
  51.                 SortFB(Seq, 0, pivot - 1);
  52.                 //sort high
  53.                 SortFB(Seq, pivot + 1, end);
  54.         }
  55. }
复制代码


我知道贴代码每人肯看,但是我的代码那么少,而且风格也不错大家就帮我看一下吧

我说的速度慢是指我排序40个数字居然画了十几秒的时间,我想486也不需要那么长的时间啊 [em24]

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2004-10-6 15:53:00 | 显示全部楼层

Re:为什么我的快速排序速度那么慢?

我试一下看看……

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2004-10-6 15:56:00 | 显示全部楼层

Re:为什么我的快速排序速度那么慢?

算了,代码排版就排死我了。我不看了……

62

主题

296

帖子

302

积分

中级会员

Rank: 3Rank: 3

积分
302
QQ
 楼主| 发表于 2004-10-6 16:07:00 | 显示全部楼层

Re: 为什么我的快速排序速度那么慢?

靠,这样就不看了?帮个忙啊

sf_200410616738.rar

556 Bytes, 下载次数:

37

主题

727

帖子

740

积分

高级会员

Rank: 4

积分
740
发表于 2004-10-6 16:09:00 | 显示全部楼层

Re:为什么我的快速排序速度那么慢?

做人要厚道
不能浮躁嘛:)

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2004-10-6 16:13:00 | 显示全部楼层

Re:为什么我的快速排序速度那么慢?

好了我告诉你原因吧

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2004-10-6 16:14:00 | 显示全部楼层

Re:为什么我的快速排序速度那么慢?

是你的轴值没选好。所以总是运行在接近最差时间上。来来来,你把
int pivot = start;改成
int pivot = (start+end)/2;
试下,一下就快了

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2004-10-6 16:16:00 | 显示全部楼层

Re:为什么我的快速排序速度那么慢?

快排对轴值的选择要求是很高的。

62

主题

296

帖子

302

积分

中级会员

Rank: 3Rank: 3

积分
302
QQ
 楼主| 发表于 2004-10-6 16:22:00 | 显示全部楼层

Re:为什么我的快速排序速度那么慢?

但如果把NUM改成50以上还是很慢啊
我是要对透明物体进行从远至近的排序,如果速度那么慢,怎么行?

21

主题

170

帖子

170

积分

注册会员

Rank: 2

积分
170
QQ
发表于 2004-10-6 16:23:00 | 显示全部楼层

Re:为什么我的快速排序速度那么慢?

同志们基础不错呐,这些我都用STL的.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-17 05:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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