自己调试代码就很清晰了,图2打印的arr[i]相当于程序执行过程中的中间产物,这个值无意义
图1打印的arr[i]由i决定,此处i是不可能重复的,而数组中的每个元素也是唯一的,那么取值自然不会重复
图2打印的arr[i]由num决定,num是一个(伪)随机数,这也是为什么会出现重复的主要原因
举例说明,下面这种情况能使图2的arr[i]打印连续3次相同的值
i = 4
swap前,arr = 9 5 4 1 2 6 7 8 3
num= 2
swap后,arr = 9 5 2 1 4 6 7 8 3
打印 arr[i] = 4
i = 5
swap前,arr = 9 5 2 1 4 6 7 8 3
num= 4
swap后,arr = 9 5 2 1 6 4 7 8 3
打印 arr[i] = 4
i = 6
swap前,arr = 9 5 2 1 6 4 7 8 3
num= 5
swap后,arr = 9 5 2 1 6 7 4 8 3
打印 arr[i] = 4
因此按照图2的写法,打印arr[i]全部相同的情况也是有的
图1才是查看最终结果的正确写法。初学者最好不要纠结这类问题,只需要知道怎样写是正确的就可以了