面试官:手写一个冒泡排序,并对其改进( 四 )

上面的这个虽然很好 , 必过还是有一定的局限性 , 比如说数组的数据量很大有10000个 , 前面3000个杂乱无章 , 后面7000个都是排好的 , 而且还都比前3000个要大 , 这时候只需要比较前3000个即可 。 但是上面的改进算法 , 在对前3000个进行排序的时候 , 每次还都要和后7000个比较 。 这就显得臃肿了 。 于是我们进行改进 。

这个改进就是把flag变为具体的位置了 , 这样我们就可以记录末尾的边界 。 这个边界是排序与不排序的边界 。

三、总结

冒泡排序在笔试或者是面试的时候 , 涉及到的时间复杂度和空间复杂度都是第一种普通情况 。 因此它的时间复杂度是O(n^2) 。 虽然简单 , 但是时间上确实是比较长 。

我们一定要注意和选择排序的区别 , 选择排序是走一趟找出来一个最小的值和第一个同学交换位置 。 而冒泡排序是相邻同学比较高低 , 这样走一趟 , 最高个就沉到末尾了 。

推荐阅读