如图,我对于这个冒泡法嵌套循环理解是:小的和大的交换,如果无法交换则终止小的for循环。
1.但是我很疑惑,假设这里有一个一维数组b[i]={3,1,2,4,1}
如果按照这个循环来讲,
j=0,i=0,开始循环,3与1交换,3再与2交换,遇到4时停止循环,
此时数组b[i]{1,2,3,4,1}。
再次进入大层for循环,j=1,i=0,此时1<2直接退出循环了,那最终数组b[i]={1,2,3,4,1}。并未实现冒泡法所说的底层是最大的。这是为什么?
2.其次,小层for循环的i
j=0,i=0,开始循环,3与1交换,3再与2交换,遇到4时停止循环===谁跟你说遇到4的时候停止循环的呢???还会继续进行4和1的比较啊,每一趟内循环的结果是将最大值移动到数组末尾
你前两句话就理解错了
break终止的是大循环,不是小循环
而且你对冒泡排序的理解也完全不对
为什么叫冒泡排序呢,因为它冒泡啊
冒泡分往大的方向冒和小的方向冒两种,不管是哪种,都是先把数冒泡到数组的一端去
比如你放的这个代码就是在往大的方向冒泡,那么第一次小循环结束后4肯定跑到最后去了,怎么可能1还在4后面
第二个问题,内层完全可以写i<k-2,但是这样纯属浪费时间,因为第1次循环把第k-1个位置已经冒成了最大的数
第2次循环把k-2的位置变成了次大的数,以此类推,后面已经排好序了还去比较就是在浪费时间
如果小循环的过程中没有任何元素交换位置,说明整个已经是顺序的了,就不需要再冒泡了