关于冒泡排序程序代码的一点困惑?
template<class T>
void bubblesort(T data[],int n){
for(int i=0;i<n-1;i++)
for(int j=n-1;j>i;--j)
if(data[j]<data[j-1])
swap(data[j],data[j-1]);//swap将元素data[j],data[j-1]进行交换。
}
请问一下在这段代码里面for(int j=n-1;j>i;--j)这个地方为什么要用--j,如果用j--会有区别?
谢谢!!
问题点数:20、回复次数:12Top
1 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2005-04-28 16:24:22 得分 0
試一下 就指導了呀。。
這種情況下 沒有 區別。Top
2 楼useresu(俗人)(灌水是我无言的抗议)回复于 2005-04-28 16:25:48 得分 0
在此没区别,
但是--j和j--还是有区别的.
int i = 0;
int j = 3;
i = j--;//则i= 3;
如果i = --j;则i = 2;Top
3 楼useresu(俗人)(灌水是我无言的抗议)回复于 2005-04-28 16:34:00 得分 0
++a是先修改操作数使之成为表达式的值
a++是先将操作数做为表达式的值,再++
但在此没区别Top
4 楼power77()回复于 2005-04-28 16:51:38 得分 20
--j的效率比j--要高。
你重载一下前缀和后缀increment,decrement就知道了,后缀实现必须引入一个临时变量
// 前缀形式:增加然后取回值
UPInt& UPInt::operator++()
{
*this += 1; // 增加
return *this; // 取回值
}
// postfix form: fetch and increment
const UPInt UPInt::operator++(int)
{
UPInt oldValue = *this; // 取回值
++(*this); // 增加
return oldValue; // 返回被取回的值
}Top
5 楼lsrj(小孬)回复于 2005-04-28 19:37:32 得分 0
好像在for语句里,j--与--j在所要达到效果来看没有区别!当然只看j--与--j肯定有区别Top
6 楼fireflyc(萤火虫)回复于 2005-04-28 19:42:30 得分 0
在这里是没区别的。
Top
7 楼jipuy(C)回复于 2005-04-28 20:21:42 得分 0
回复人: useresu(俗人) ( ) 信誉:100 2005-04-28 16:25:00 得分: 0
在此没区别,
但是--j和j--还是有区别的.
int i = 0;
int j = 3;
i = j--;//则i= 3;
如果i = --j;则i = 2;
赋值了就有区别;
没赋值就没区别;
Top
8 楼zhangsong1238(C++ fans)回复于 2005-04-28 21:51:27 得分 0
这个问题我看了一些书上写的,但是两种写法都有的,当是就感到有点迷糊的,真像power77() 说的一样有效率上的区别吗?Top
9 楼WingForce(初六,履霜,坚冰至。)回复于 2005-04-28 22:02:07 得分 0
?
这个问题我看了一些书上写的,但是两种写法都有的,当是就感到有点迷糊的,真像power77() 说的一样有效率上的区别吗?
==================================================================
据说是有效率上的区别
不过,实际上,我敢打包票,你120%感觉不到任何的效率上的区别Top
10 楼plovej(把自己变为挣钱的机器)回复于 2005-04-28 22:08:00 得分 0
对啊,在此出是没什么区别啊,至于效率吗,有是有,但是
在这个问题上是感觉不出来的!Top
11 楼maleo(走向地狱)回复于 2005-04-28 22:28:23 得分 0
j--和--j独立存在的时候除了--j要快些以外是没有什么区别的
但是当二者参与了运算的时候,就有区别了Top
12 楼kantia(45)回复于 2005-04-29 14:44:22 得分 0
++a是先修改操作数使之成为表达式的值
a++是先将操作数做为表达式的值,再++。
其实这个我也知道,但在for循环里面好象就有点困惑。
在for循环里面既然j--和--j相同,为什么要用--j呢?
感觉power77() 说的有道理!!Top




