采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
代码如下
for(int i = 1; i < n; i++) for(int j = i - 1; j >= 0; j --) if(arr[i] < arr[j]) swap(arr[i], arr[j]);
以3 2 1为例,走一遍程序你就理解了:)
首先,i = 1时,j = 0,arr[i] = arr[1] = 2 < arr[j] = arr[0] = 3 交换arr[0]和arr[1],此时数组变成2 3 1
当数组为2 3 1以后,此时开始i=2的第二重循环
首先,j = 1,arr[i] = arr[2] = 1 < arr[j] = arr[1] = 3 交换arr[2]和arr[1],此时数组变成2 1 3
然后,j = 0,arr[i] = arr[2] = 3 > arr[j] = arr[0] = 0,不作任何交换。排序结束。
最终,我们获得的数组是2 1 3。
关键在于,当arr[i]和arr[j]交换以后,i位置的元素发生了改变:)
很多时候,当不知道程序为什么出错的时候,找一个小的测试用例,仔细跟一下程序,看看程序到底发生了什么,数据在现有的逻辑下是怎么一步步改变的,是非常有意义的。调程序一定要耐心,不能想当然。这可是计算机专业的硬本领:)
谢谢老师!!
登录后可查看更多问答,登录/注册
课程专为:短时间内应对面试、升职测评等艰巨任务打造
8.7k 21
5.7k 3
4.9k 5
1.3k 18