首页 > 编程语言 >【总结】排序算法的时间复杂度和空间复杂度

【总结】排序算法的时间复杂度和空间复杂度

时间:2023-08-12 17:56:10浏览次数:55  
标签:nlogn 复杂度 算法 时间 数组 logn 排序

排序算法的时间复杂度和空间复杂度

最好时间复杂度最坏时间复杂度 平均时间复杂度 空间复杂度是否为稳定排序是否为原地排序
冒泡排序 $O(n)$ 初始数组正序 $O(n^2)$ 初始数组逆序 $O(n^2)$ $O(1)$
原地使用数组,无额外内存开销
插入排序
选择排序 $O(n^2)$ [每一趟都选出最值,一趟为 $O(n)$,一共跑$n$趟]
希尔排序 $O(n)$ $O(n^2)$ $O(n^{1.3}$)
快速排序 $O(nlogn)$ $O(n^2)$每次都取到的是最大值 $O(nlogn)$ $O(logn)$
[递归栈的深度]
堆排序 $O(nlogn)$
堆排序时间复杂度分析:堆调整的时间复杂度为$O(logn)$对n元素进行堆调整时间复杂度为 $O(nlogn)$]
堆调整时间复杂度分析:根节点和排在最后的序号为i的叶子结点交换,堆调整的操作次数=树的深度=$logn$
$O(1)$
原地使用数组,无额外内存开销
归并排序
划分区间的时间复杂度:$O(logn)$
归并$n$层的时间复杂度:$O(nlogn)$
归并每层的时间复杂度:$O(n)$ 归并的层数:$logn$
总时间复杂度:$O(nlogn)+ O(logn)=O(nlogn)$
$O(n+logn)$
[$logn$: 递归栈的深度]
[$n$: 辅助储存结果数组的长度]
计数排序 $O(n+k)$
$k$为辅助桶的数据范围(数组最大值-最小值)
求最大最小值:$O(n)$
遍历装入桶:$O(n)$
循环输出元素:$O(k)$
$O(n+k)$
$n$:保存输出结果的数组
$k$:辅助桶数组
将输出结果直接覆盖到原数组,空间复杂度可将为$O(k)$
桶排序 $O(n+k)$ $O(k)$
基数排序 $O(n*m)$

分类

标签:nlogn,复杂度,算法,时间,数组,logn,排序
From: https://www.cnblogs.com/joiln/p/17622807.html

相关文章

  • AXI传输总结+页面置换算法+不定态判定+PATH管理
    AXI传输总结AXI这部分我没有深入解除过,只是多多少少摸一下看下数据路径有没有传过去,总感觉不到难点在哪里,不就是一个传输协议吗?这个是soc设计方法与实现中提供的附录,可供参考,但是有版本错误(AXI4不支持写的交织,没有WID)https://www.hxedu.com.cn/hxedu/w/inputVideo.do?qid=5a79......
  • 冒泡排序
    #include<iostream>usingnamespacestd;intmain(){intt,a[4];for(inti=1;i<=3;i++){cin>>a[i];}for(inti=1;i<=2;i++){for(intj=1;j<=3-i;j++){if(a[j]<a[j+1]){t......
  • 常用的排序算法
    总结基于比较的排序(从小到大排序)冒泡排序GO实现funcMySort(arr[]int)[]int{//冒泡//大的往后冒fori:=0;i<len(arr);i++{forj:=0;j<len(arr)-1-i;j++{ifarr[j]>arr[j+1]{arr[j],arr......
  • 快速排序(NB)
    博客地址:https://www.cnblogs.com/zylyehuo/#_*_coding:utf-8_*_defpartition(li,left,right):tmp=li[left]whileleft<right:whileleft<rightandli[right]>=tmp:#从右面找比tmp小的数right-=1#往左走一步l......
  • 交换排序
    数据结构--交换排序基本思想:两两比较,如果发生逆序则交换,直到所有记录都排好序为止.冒泡排序每趟不断将记录两两比较,并且按照"前小后大"规则交换.冒泡排序的过程演示n个记录,需要比较n-1趟.第m躺需要比较n-m次冒泡排序算法描述还可以继续优化:某一趟比较时不出现......
  • 【蓝桥杯备赛系列 | 简单题】数组排序(八大排序演示)
    ......
  • 冒泡排序
    #include<iostream>usingnamespacestd;intmain(){intt,a[4];for(inti=1;i<=3;i++){cin>>a[i];}for(inti=1;i<=2;i++){for(intj=1;j<=3-i;j++){if(a[j]<a[j+1]){t......
  • a、算法的提出
    基本概念参考文档:《数据结构与算法Python语言描述_裘宗燕》B站视频:数据结构与算法(Python语言描述)--完整顺序版算法的概念算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据......
  • 文心一言 VS 讯飞星火 VS chatgpt (74)-- 算法导论7.2 2题
    二、如果用go语言,当数组A的所有元素都具有相同值时,QUICKSORT的时间复杂度是什么?文心一言:在Go语言中,对一个所有元素都相等的数组进行快速排序(QuickSort)的时间复杂度是O(nlogn)。快速排序是一种分而治之的排序算法,它将一个数组分成两个子数组,然后对这两个子数组进行递归排序。在最......
  • 文心一言 VS 讯飞星火 VS chatgpt (73)-- 算法导论7.1 4题
    四、如何修改QUICKSORT,使得它能够以非递增序进行排序?文心一言:快速排序(Quicksort)是一种常用的排序算法,基于分治策略进行设计。默认情况下,快速排序会以递增序进行排序。若想修改快速排序以实现非递增排序,我们需要调整比较和交换的逻辑。以下是修改后的非递增快速排序的Python代码......