首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

实际中冒泡排序时间复杂度有关问题

2012-06-17 
实际中冒泡排序时间复杂度问题给5,4,3,2,1做冒泡排序;因为此数列正好从大到小,所以冒泡排序所用的时间应该

实际中冒泡排序时间复杂度问题
给5,4,3,2,1做冒泡排序;因为此数列正好从大到小,所以冒泡排序所用的时间应该是最坏时间O(n^2) = 5^2 = 25 (意思应该是说比较25次吧)
第一趟下来:4,3,2,1,5 (次趟比较4次;5分别跟4,3,2,1比较)
第二趟下来:3,2,1,4,5 (次趟比较3次;4分别跟3,2,1比较)
第三趟下来:2,1,3,4,5 (次趟比较2次;3分别跟2,1比较)
第四趟下来:1,2,3,4,5 (次趟比较1次;2跟1比较)

按公式应该一共比较25次,但是实际只有10次(4+3+2+1=10),这个咋解释?

不吝赐教
谢谢回复

[解决办法]
时间复杂度说的是算法随着输入的增长,时间增长的速度。并不是让你用来精确计算算法次数的。

O(n^2)也就是假设输入按线性增长,算法所花的时间大致按照二阶函数增长。
输入:1:2:3
时间:1:4:9

这里讲的就是个比例而已,1可能代表1次运算,也可能代表10次运算。
[解决办法]
我还是把源代码写一下吧
25次是这样

Java code
int[] x = {5,4,3,2,1};        for (int i = 0; i < x.length; i++) {            for (int j = 0; j < x.length-1; j++) {                if(x[j] > x[j+1]){                    int temp = x[j];                    x[j] = x[j+1];                    x[j+1] = temp;                }            }        }
[解决办法]
时间复杂度,也就是你的那个O(n^2),这里表示的是渐近时间复杂度,也就是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。注意,只是数量级,不是精确的值。
还有一个概念是精确的时间复杂度,指该算法所求解问题规模n的函数。如果是这样,那这个函数应该是f(n)=(n-1)n/2,在5个数的情况下f(n)=15。也就是最坏情况的比较次数。
f(n)=1/2n^2+1/2n。当n趋向无穷大是,n的数量级就是n^2。这也就是O(n^2)的由来。

热点排行