关于QuickSort

Flouse 2007-04-15 03:28:24
请看下面的一段代码:

template<class T>
void QuickSort( T data[], int n ){
int i, max;
if ( n < 2 ) return;
//find the largest element and put it at the end of data[]
for ( int i = 1, max = 0; i < n; i++ ){ //??WHY
if ( data[max] < data[i] ) max = i;
}
exch ( data[n-1], data[max] );
QuickSort( data, 0, n-2 );
}

我的问题是:
为什么要用这一段,效率上有很大作用吗?
for ( int i = 1, max = 0; i < n; i++ ){ //??WHY
if ( data[max] < data[i] ) max = i;
}
exch ( data[n-1], data[max] );
...全文
344 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Flouse 2007-09-13
  • 打赏
  • 举报
回复
还是结贴了……
不想低调 2007-04-22
  • 打赏
  • 举报
回复
逊,看不懂
Flouse 2007-04-22
  • 打赏
  • 举报
回复
——
iambic() ( ) 信誉:100 Blog 加为好友 2007-4-15 19:24:16 得分: 0

看来大家对几种基本排序算法不是很熟……
——
这名话说的没错。我也是那些人当中的一个。

请看清楚,那不是一个递归调用!
template<class T>
void QuickSort( T data[], int first, int last ){
int lower = first + 1, upper = last;
exch( data[first], data[(first+last)/2]] );
T bound = data[first]; //枢轴记录
while ( lower <= upper ){
while ( data[lower] < bound ) lower++;
while ( bound < data[upper] ) upper--;
if ( lower < upper ) exch( data[lower++], data[upper--] );
else lower++;
}
exch ( data[upper], data[first] );
if ( first < upper-1 ) QuickSort( data, first, upper-1 );
if ( upper+1 < last ) QuickSort( data, upper+1, last );
}

template<class T>
void QuickSort( T data[], int n ){
int i, max;
if ( n < 2 ) return;
//find the largest element and put it at the end of data[]
for ( int i = 1, max = 0; i < n; i++ ){ //??WHY
if ( data[max] < data[i] ) max = i;
}
exch ( data[n-1], data[max] );
QuickSort( data, 0, n-2 );
}

quicksort(data[], n)的作用是:
对要排序的数组进行预处理,找出数组中的的最大元素,将它放在未端,可以防止lower的值超过数组的末端。

而如果没有这个预处理,则第一层while循环必须如下所示:
while ( lower < last && data[lower] < bound )

在此,我要对回答及看过这个问题的人表示抱歉,我没有把完整的函数写出来,让大家难以分析,不好意思啊。


iambic 2007-04-15
  • 打赏
  • 举报
回复
看来大家对几种基本排序算法不是很熟……
elephont9527 2007-04-15
  • 打赏
  • 举报
回复
分明是bubblesort,为什么还要来个递归呢?画蛇添足。。。
iambic 2007-04-15
  • 打赏
  • 举报
回复
删掉以后看输出结果。如果你电脑上装有编译器的话。
iambic 2007-04-15
  • 打赏
  • 举报
回复
交换排序。

有什么作用?你把那两行删掉就是了。
Waiting4you 2007-04-15
  • 打赏
  • 举报
回复
这段用的不是快速排序算法. 应该是沉底/冒泡算法

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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