miniArce 发表于 2020-5-11 01:23:27

冒泡排序求解惑

for ( i = 0; i < su - 1; i++) {//比较轮数,比较减一次(su-1)
                //因为每次比较一次少一个元素(su-1),但每次循环i++,所以要(su-1-i)才是少一个元素
                for (j = 0; j < su - 1 - i; j++) {//
                        if (a > a) {//两个相邻的元素判断
                                int tap = 0;
                                tap=a;
                                a = a;
                                a = tap;
                        }
                }
        }
老哥们,冒泡排序第二个for循环(j<su-1-i)我没有整明白,写成(su-1)的话结果也是对的。求解惑

赚小钱 发表于 2020-5-11 03:23:36

之后的元素是有序的,并且是冒上去的泡,你比较不比较,他们都是大的(或者小的,根据你的条件)

你这个问题,自己动手在纸上画一下就行了。

Hello. 发表于 2020-5-11 05:54:29

楼上已解答{:10_256:}

永恒的蓝色梦想 发表于 2020-5-11 07:16:00

那我就领鱼币吧{:10_256:}

BWQ 发表于 2020-5-11 07:58:52

白嫖个鱼币

大甲鱼qq 发表于 2020-5-11 09:29:56

循环次数的问题,你可以放一个变量进去看看有-i和没-i的循环次数是多少.

a1163675107 发表于 2020-5-11 09:30:33

chxchxkkk 发表于 2020-5-11 09:30:57

不许白嫖{:5_109:}

sunrise085 发表于 2020-5-11 09:31:09

内层循环 for 条件 j < su - 1 - i 与 j< su - 1 结果一样,前者就能完成排序了,因为外层循环一次,就会有一个已经排序完成了,下次外层循环就没必要再对其进行比较了。
给你一张图看看就知道了。即使你把内层循环的条件改为后者,也仅仅是多跑几遍if,二不会真的交换,因为后面的已经排好序了,已经不符合交换的条件了

miniArce 发表于 2020-5-11 09:35:20

sunrise085 发表于 2020-5-11 09:31
内层循环 for 条件 j < su - 1 - i 与 j< su - 1 结果一样,前者就能完成排序了,因为外层循环一次,就会有 ...

谢谢

miniArce 发表于 2020-5-11 09:36:14

大甲鱼qq 发表于 2020-5-11 09:29
循环次数的问题,你可以放一个变量进去看看有-i和没-i的循环次数是多少.

谢谢
页: [1]
查看完整版本: 冒泡排序求解惑