有关快速排序,高程朋友请进……

tongdings 2003-09-26 07:35:26
求以 (low+high) / 2 为基准的快速排序算法。

以下算法,对吗(说明:通过调试结果是对的)?
还想问一下,快速排序算法是否是已成形的统一的算法呢?
还是有不同的实现呢?高手指点。谢过了。分不是问题……

具体算法如下:

//快速排序
void r_quick(int e[],int low,int high)
{
int i,j,t;
if(low < high) //对low至high以e[low]为基准作划分
{
i = low;
j = high;

// t = e[i]; //以e[i]为基准

//以e[(i+j)/2]为基准
t = e[(i+j)/2];
e[(i+j)/2] = e[i];

while (i < j)
{
while (i < j && e[j] > t) j --;
if (i < j) e[i++] = e[j];

while (i < j && e[i] <= t) i ++;
if (i < j) e[j--] = e[i];
}

e[i] = t;
r_quick (e,low,i-1); //递归,对左子序列作划分
r_quick (e,i+1,high); //递归,对右子序列作划分
}
}

...全文
22 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tongdings 2003-09-27
  • 打赏
  • 举报
回复
我用google一下,好像也有用你说的随机选择策略(random access)。
好了,差不多了。结贴!
pebble 2003-09-26
  • 打赏
  • 举报
回复
我看的几本算法书籍里都是用第一个作为基准,可能是比较便于理解吧
其实,为了提高算法性能,有的取基准值采用随机选择策略
tongdings 2003-09-26
  • 打赏
  • 举报
回复
恩。这是考试应变了吧。呵呵。多谢 pebble(铿锵石头) 兄!
其实我有用过pascal实现带有partion(划分)快速排序的,那时我取的是第一个元素。
脑子怎么转不过来?没变通,也许是为了争以上算法的正确性而忘了。
一般做法好像是否取第一、中间、最后键值的中间值作为基准点比较规范一说?
pebble 2003-09-26
  • 打赏
  • 举报
回复
不过那道题目,你只要知道快速排序的基本思路也就解出来了,因为一趟划分后我们都知道肯定基准值会在中间,左边的数值都比基准值小,右边的都比基准值大,那道题目里头只有一个答案符合
tongdings 2003-09-26
  • 打赏
  • 举报
回复
对的。看错了。
tongdings 2003-09-26
  • 打赏
  • 举报
回复
return j; ----》 ???
笔误吧?

ft.
好像那道高程题没具体说用什么方式处理阿。
如何解?故有标准算法一问。
高程出题还是不规范阿。
pebble 2003-09-26
  • 打赏
  • 举报
回复
刚才刚贴过,西西,看这边分多,贴到这里

其实快速排序的思路是固定的,但具体算法并不唯一,所以不同的算法产生的结果也不尽相同,我从3本书上看到了三种方法
lichin(李俊)和 tongdings(痛定)的算法是高程教材上的算法,并没什么错误
VBArter() 的算法是这样的

e 是待排序数组,假设是全局变量

void q_sort(int low, int high)
{
int q;
if(low<high){
q=partion(low, high, e[low].key);
q_sort(low, q);
q_sort(q+1, high)
}
}

int partion(int low, int high, int key)
{
int temp;
int i=low-1;
int j=high+1;
while(true){

do
--j;
while(e[j]>key)

do
++i;
while(e[i]<key)

if(i<j){
temp=e[j];
e[j]=e[i];
e[i]=temp;
}
else
return j;
}
}
tongdings 2003-09-26
  • 打赏
  • 举报
回复
自己先up一下。

2,948

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧