数据结构与算法 / 冒泡排序最坏情况下的时间复杂度解析
冒泡排序是一种用时间换空间的排序方法,最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序。在这种情况下,每一次比较都需要进行交换运算。
举个例子来说,一个数列 5 4 3 2 1 进行冒泡升序排列,
第一次大循环从第一个数(5)开始到倒数第一个数(1)结束,比较过程:先比较 5 和 4,4 比 5 小,交换位置变成 4 5 3 2 1;比较 5 和 3,3 比 5 小,交换位置变成 4 3 5 2 1……最后比较 5 和 1,1 比 5 小,交换位置变成 4 3 2 1 5。这时候共进行了 4 次比较交换运算,最后 1 个数变成了数列最大数。
第二次大循环从第一个数(4)开始到倒数第二个数(2)结束。进行3次比较交换运算。
……
所以总的比较次数为 4 + 3 + 2 + 1 = 10次。
对于 n 位的数列则有比较次数为 (n-1) + (n-2) + ... + 1 = n * (n - 1) / 2,这就得到了最大的比较次数。
故使用 O(N^2) 表示排序的时间复杂度。
举个例子来说,如果 n = 10000,那么 n(n-1) / 2 = (n^2 - n) / 2 = (100000000 - 10000) / 2,相对 10^8 来说,10000 小的可以忽略不计了,所以总计算次数约为 0.5 * N^2。用 O(N^2) 就表示了其数量级(忽略前面系数 0.5)。
(SAW:Game Over!)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
