黑马程序员技术交流社区
标题:
关于排序的时间复杂度
[打印本页]
作者:
刻骨铭心
时间:
2015-10-30 23:11
标题:
关于排序的时间复杂度
我目前只学过冒泡排序,前两天看同学的面试题提到排序有什么时间复杂度,那是什么意思?怎么计算时间复杂度?
作者:
flyingwind
时间:
2015-10-31 00:27
时间复杂度是指算法的时间耗费,是用来度量算法效率的一个很好的工具,是用数学极限思想中的等价无穷大O(...)来表示的, 往往是算法中各种操作次数的总和,就拿冒泡排序来说,对于n元数组A的排序如下: int out,in; public void bubbleSort() { for(out=n-1;out>1;out--) { //外部循环,从后向前 for(in=0;in<out;in++) { //内部循环,从前向后. if(A[in]>A[in+1]){ int tmp=A[x];//交换元素 A[x]=A[y]; A[y]=tmp; } } } } 对于变量in和in+1,在第一趟排序时进行了n-1次比较操作,第二趟排序进行了n-2次排序.如此类推,最后一次进行了1次比较,那么 对于n个数据项,进行比较的次数和就是, 1+2+3+...+n-2+n-1=(n-1)*n/2 这样算法进行了n*n/2次比较(当n很大时,减1可忽略),因为只有A[in]>A[in+1]时,交换才执行,那么交换的次数永远少于 比较的次数,如果数据是随机的,那么可以认为只有一半的数据进行了交换,则交换的总次数是n*n/4; 比较和交换的次数都和n的平方成正比,而常数是不算在大O表示法中的,所以可以认为冒泡排序运行需要O(n*n)时间级别. 它的时间复杂度就是O(n*n); 其它算法可以,以此类推,希望能够 帮到你.
作者:
flyingwind
时间:
2015-10-31 00:28
不好意思,在txt中排好的格式,不知道为什么到了这里就乱了,
作者:
刻骨铭心
时间:
2015-10-31 07:39
flyingwind 发表于 2015-10-31 00:27
时间复杂度是指算法的时间耗费,是用来度量算法效率的一个很好的工具,是用数学极限思想中的等价无穷大O(...) ...
没事,说的挺好哒,谢谢了
作者:
WosLovesLife
时间:
2015-10-31 10:21
感受到格式化的重要性………………
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2