在之前的两篇blog中,已经简要的说明了冒泡排序和快排的原理、过程图示以及代码实现。这里主要讨论的是两种排序的复杂度以及一些常见的优化手段。 冒泡排序 【时间复杂度】 在整个序列完全是有序的状态下,只需要执行第一次的内层循环。只要做好标记,我们就不用再进行后续的内层循环。此时时间复杂度 ...
问题:给定一个整数序列,按照从小到大的顺序 确切地说,是非递减的顺序 排列序列中的整数。 输入:一个整数序列。 输出:整数序列,其中的整数升序排列。 因为谭浩强的C语言教材,大家最熟悉的可能就是冒泡排序。 下面是冒泡排序的一个C语言实现,a是数组首地址, size 是数组元素的个数。 冒泡排序的思想,是让最大的数浮动到数组最后的位置,其次大的数浮动到数组倒数第二个位置 当然,你也可以从大到小排序 ...
2015-03-18 13:06 2 27163 推荐指数:
在之前的两篇blog中,已经简要的说明了冒泡排序和快排的原理、过程图示以及代码实现。这里主要讨论的是两种排序的复杂度以及一些常见的优化手段。 冒泡排序 【时间复杂度】 在整个序列完全是有序的状态下,只需要执行第一次的内层循环。只要做好标记,我们就不用再进行后续的内层循环。此时时间复杂度 ...
冒泡排序的时间复杂度O(n) 这种实现方法很显然无论如何都会去比较,因此还是O(N^2),但这是实现的不好导致的,事实上可以添加一个标志位就可以搞定这个问题: ...
冒泡排序是一种用时间换空间的排序方法,最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序。在这种情况下,每一次比较都需要进行交换运算。举个例子来说,一个数列 5 4 3 2 1 进行冒泡升序排列,第一次大循环从第一个数(5)开始到倒数第二个数(2)结束,比较过程:先比较5和4,4比5小,交换 ...
,直到i=n-1结束,排序完成。 三、负杂度分析 1. 不管原始数组是否有序,时间复杂度都是O ...
快速排序时间复杂度分析:数组长度为n1,平均复杂度:t(n) = cn + 2t(n/2)= cn + 2(cn/2 + 2t(n/4)) = 2cn + 4t(n/4)= 2cn + 4(cn/4 + 2t(n/8)) = 3cn + 8t(n/8)= icn + 2^i * t(n/(2^i ...
近期很多童鞋在讨论大厂面试的算法题,有部分同学表示一脸懵逼,不知从何下手,还有一一部分同学写的冒泡排序算法是直接从网上复制下来的冒泡排序,大多数都没有考虑时间复杂度,说白了只是实现了冒泡的流程,严格来讲只能算是一个伪冒泡排序, 那么接下来给大家来捋一捋冒泡排序的原理,只有搞懂排序的原理 ...
我在许多书本上看到冒泡排序的最佳时间复杂度是O(n),即是在序列本来就是正序的情况下。 但我一直不明白这是怎么算出来的,因此通过阅读《算法导论-第2版》的2.2节,使用对插入排序最佳时间复杂度推算的方法,来计算冒泡排序的复杂度。 1. 《算法导论》2.2中对插入排序最佳时间复杂度的推算 ...