时间排序算法
❶ 排序算法的时间复杂度计算
你这个问题是自己想出来的吧?
第一,你指的时间复杂度是大O表示法的复杂度,也就是一个上界,但不是上确界,所以就算你以一种方式中断排序过程,时间复杂度还是O(N*logN),假设排序过程还能执行的话。
第二,达到O(N*logN)的排序算法,以快速排序为例,快速排序不知道你看过没有,它不像选择排序或者冒泡排序那样,每一趟可以确定一直最大或者最小值,对于快速排序,每一趟排序后如果你删掉最后一个元素将导致整个算法失效。如果你要用这种删除元素方法的话,只能采用冒泡排序或者选择排序,时间复杂度是O(N^2)
所以,我猜想你是不是想做类似于在N个元素中寻找前K个最大者之类的事情(K=N-L)
如果是这样的话,有复杂度是O(N*logK)的算法,利用快速排序中的partition操作
经过partition后,pivot左边的序列sa都大于pivot右边的序列sb;
如果|sa|==K或者|sa|==K-1,则数组的前K个元素就是最大的前K个元素,算法终止;
如果|sa|<K-1,则从sb中寻找前K-|sa|-1大的元素;
如果|sa|>K,则从sa中寻找前K大的元素。
一次partition(arr,begin,end)操作的复杂度为end-begin,也就是O(N),最坏情况下一次partition操作只找到第1大的那个元素,则需要进行K次partition操作,总的复杂度为O(N*K)。平均情况下每次partition都把序列均分两半,需要logK次partition操作,总的复杂度为O(N*logK)。
由于K的上界是N,所以以N表示的总复杂度还是O(N*logN)
❷ 排序算法的时间复杂度是多少
排序算法的时间复杂度是T(n)。
算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f (n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
性质:
一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。
在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n2+3n+4与T(n)=4n2+2n+1它们的频度不同,但时间复杂度相同,都为O(n2)。
❸ 算法基础|排序算法时间复杂度
常见的7种排序算法时间复羡袜杂度:
1)直接插入排序,时间复杂度为O(n)~O(n²)
2)冒乱锋泡排序,时间复杂度为O(n²)
3)哗派晌简单选择排序,时间复杂度为O(n²)
4)希尔排序,时间复杂度为O(n^1.3)
5)快速排序,时间复杂度为O(n )~O(n²)
6)堆排序,时间复杂度为O(n )
7)归并排序,时间复杂度为O(n )
❹ 排序算法的时间复杂度如何
排序算法的时间复杂度是若文件的初始状态是正序的,一趟扫描即可完成排序。
比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
次线性时间
对于一个算法,若其匹配T(n) = o(n),则其时间复杂度为次线性时间(sub-linear time或sublinear time)。实际上除了匹配以上定义的算法,其他一些算法也拥有次线性时间的时间复杂度。例如有O(n)葛罗佛搜索算法。
常见的非合次线性时间算法都采用了诸如平行处理(就像NC1matrix行列式计算那样)、非古典处理(如同葛罗佛搜索那样),又或者选择性地对有保证的输入结构作出假设(如幂对数时间的二分搜索)。
不过,一些情况,例如在头 log(n) 比特中每个字符串有一个比特作为索引的字符串组就可能依赖于输入的每个比特,但又匹配次线性时间的条件。
“次线性时间算法”通常指那些不匹配前一段的描述的算法。它们通常运行于传统计算机架构系列并且不容许任何对输入的事先假设。但是它们可以是随机化算法,而且必须是真随机算法除了特殊情况。
❺ 时间为O(nlg n)的排序算法 如快速排序 堆排序 nlg是什么意思。好象是lgn。 什么意思
准确来说,是log(2,n),即以2为底取n的对数.
该时间复杂度的产生是由于算法中使用了二分法.二分法的其中一个显着的标志就是使得渐进复模绝杂度变为2底对数级别.
直观来说,对于1000个数的排序,效率为O(n)的排序(假设有)将花费1000"单位"的时间,那么O(n²)的排序将花费10^6"单位"的时弊芹间.而O(nlogn)的排序将花费 1000*log(1000) ≈ 10000 "单租码毕位"的时间.
这里可以看出其效率的显着优势,
而通过函数有关特征可以得知,对数函数是增长的越来越慢的,这就使得O(nlogn)的排序可以在越大的工作量中和平方级排序拉大差距.
❻ 排序算法时间复杂度、空间复杂度、稳定性比较
1.插入类排序
直接插仔腊入排序,折半插入排序,希尔排序
2.交换类排序
冒泡排序,快速排序
3.选择类排序
简单选择排序,堆排序
4.归并类排序
二路归并排序
5.基数类排序
基念卖滑配中数排序
(1)时间复杂度
快些以nlogn的速度归队
(2)空间复杂度
快排O(log2n),归并排序O(n),基数排序O(rd),其他都是O(1)
情绪不稳定,快希选一堆好友来聊天吧
❼ 时间复杂度最低的排序方法
冒泡排巧差昌序是这样实现的: 首先将所有待排序的数字放入工作列表中。 从列表的第一个数字到倒孝扒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换。 重复2号步骤,直至再也不能交换。
冒泡排序的平均时间复杂度与插入排序相同,也是平方级的,但也是非常容易实现的算法。
选择排序 选择排序是这样实现的: 设数组内存放了n个待排数字,数组下标从1开始,到n结束。
i=1 从数组的第i个元素开始到第n个元素,寻找最小的元素。 将上一步找到的最小元素和第i位元素交换。庆陆
如果i=n-1算法结束,否则回到第3步 选择排序的平均时间复杂度也是O(n^2)的。
❽ 排序算法时间
计算一个算法所消耗的时间是没有意义的,因为一个算法所用的时间不仅仅取决于算法本身,还与实现算法所使用的编程语言,输入的数据,执行算法的的硬件环境等等密切相关。
所以,一般地,我们用算法的时间复杂度(有时还要考虑空间复杂度)来衡量一个算法的好坏。计算时间复杂度是建立在执行算法中任何一个指令所消耗的时间相同的假设之上的,所以只是对算法性能的一个参考。
下面我给出常见的几种排序算法的时间复杂度:
排序法 时间复杂度
冒泡排序 O(n^2)
快速排序 O(n*log2n)
选择排序 O(n^2)
二叉树排序 O(n*log2n)
插入排序 O(n^2)
堆排序 O(n*log2n)
❾ 时间复杂度为O(n^2)的几种排序
1.最好,最坏,平均时间复杂度。
2.比较次数和交换次数。
3.时间复杂度的系数,常数,低阶。
空间复杂度为O(1) 的排序算法。
相等元素排序之后原有顺序不变。
case:
比如我们有一组数据 2,9,3,4,8,3,按照大小排序之后就是 2,3,3,4,8,9。这组数据里有两个 3。经过某种排序算法排序之后,如果两个 3 的前后顺序没有改变,那我们就把这种排序算法叫作稳定的排序算法;如果前后顺序发生变化,那对应的排序算法就叫作不稳定的排序算法。
code
空间复杂度为 O(1)
在冒泡排序中,只有升闷交换才可以改变两个元素的前后顺序。为了保证冒泡排序算法的稳定性,当有相邻的两个元素大小相等的时候,我们不吵竖弯做交换,相同大小的数据在排序前后不会改变顺序,所以冒泡排序是稳定的排序算法。
时间复杂度(执行最多的单元执行的次数)。
最佳情况:T(n) = O(n) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)
这里纤稿提供另一个分析时间复杂度的角度:
分析逆序度(定量分析)
逆序度 = 满有序度 - 有序度
有序度:
有序元素对:a[i] <= a[j], i < j。
有序度是数组中具有有序关系的元素对的个数。
code
空间复杂度为 O(1)
在插入排序中,对于值相同的元素,我们可以选择将后面出现的元素,插入到前面出现元素的后面,这样就可以保持原有的前后顺序不变,所以插入排序是稳定的排序算法。
最佳情况:T(n) = O(n) 最坏情况:T(n) = O(n2) 平均情况:T(n) = O(n2)
以上写法,最佳情况O(n2),并不是O(n)
改成如下这样写更加清晰。
code
空间复杂度为 O(1)
比如 5,8,5,2,9 这样一组数据,使用选择排序算法来排序的话,第一次找到最小元素 2,与第一个 5 交换位置,那第一个 5 和中间的 5 顺序就变了,所以就不稳定了。正是因此,相对于冒泡排序和插入排序,选择排序就稍微逊色了。
最佳情况:T(n) = O(n2) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)
❿ 排序算法的时间复杂度和空间复杂度
时间复杂度:即从序列的初始状态到经过排序算法的变换移位等操作变到最终排序好的结果状态的过程所花费的时间度量。空间复杂度:就是从序列的初始状态经过排序移位变换的过程一直到最终的状态所花费的空间开销。
1、时间复杂度
时间复杂度可以认为是对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2)。
时间复杂度O(1):算法中语句执行次数为一个常数,则时间复杂度为O(1)。
2、空间复杂度
空间复杂度是指算法在计算机内执行时所需存储空间的度量,它也是问题规模n的函数。
空间复杂度O(1):当一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1)。
空间复杂度O(log2N):当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示为O(log2n)。
空间复杂度O(n):当一个算法的空间复杂度与n成线性比例关系时,可表示为O(n)。
经处理后的数据便于筛选和计算,大大提高了计算效率。对于排序,我们首先要求其具有一定的稳定性,即当两个相同的元素同时出现于某个序列之中,则经过一定的排序算法之后,两者在排序前后的相对位置不发生变化。换言之,即便是两个完全相同的元素,它们在排序过程中也是各有区别的,不允许混淆不清。