思路:冒泡排序 就是把大的数一个个沉到下面,当然也可以是把小的数一个个浮到上面。
在最外层需要比较n-1次,因为n-1个大的数被沉到了下面,剩下一个自然就是最小的数了。
在这n-1次的里层,还需要亮亮相互比较,这次比较的次数是 n-1-i次,这也比较好理解,每当一轮最大的数沉到下面,之后它就不需要再拿出来比较了,自然比较的次数就需要再 -i。 在里层循环要做的也很简单,两两比较,然后如果前面的比后面一个大,交换位置,否则不做操作。
如果想把小的一个个浮到上面,思路一致,代码如下:
可以将以上代码优化一下,降低它的时间复杂度。
无非就是在里层循环之前加一个标识符,一开始赋值0,在里层判断里对标识符进行加操作。这样如果在某一次进行里层循环时,标识符的值没有变,就说明,两两比较的结果是正确的,不需要调换位置,即已经排序好,所以没必要继续循环下去,即时退出即可。