首页 > 编程语言 >排序算法总结

排序算法总结

时间:2024-08-01 12:25:39浏览次数:19  
标签:总结 Sort 复杂度 稳定性 算法 n2 排序

排序算法是数据结构与算法中的一个重要部分,用于对一组数据按照特定顺序进行排列。常见的排序算法有很多,每种算法都有其独特的时间复杂度、空间复杂度和稳定性等特性。以下是一些常用的排序算法及其特点:

  1. 冒泡排序(Bubble Sort)

    • 时间复杂度:平均情况下为 O(n2)O(n2),最坏情况下也是 O(n2)O(n2)。
    • 空间复杂度: O(1)O(1)。
    • 稳定性:稳定。
    • 基本思想:通过重复遍历数组,比较相邻元素并交换它们的位置来实现排序。
  2. 选择排序(Selection Sort)

    • 时间复杂度:平均情况下为 O(n2)O(n2),最坏情况下也是 O(n2)O(n2)。
    • 空间复杂度: O(1)O(1)。
    • 稳定性:不稳定。
    • 基本思想:在未排序的部分中找到最小或最大的元素,将其放到已排序的部分的末尾。
  3. 插入排序(Insertion Sort)

    • 时间复杂度:平均情况下为 O(n2)O(n2),最坏情况下也是 O(n2)O(n2)。
    • 空间复杂度: O(1)O(1)。
    • 稳定性:稳定。
    • 基本思想:从第二个元素开始,将每个元素插入到前面有序部分的适当位置。
  4. 希尔排序(Shell Sort)

    • 时间复杂度:平均情况下为 O(nlog⁡n)O(nlogn),最坏情况下为 O(n2)O(n2)。
    • 空间复杂度: O(1)O(1)。
    • 稳定性:不稳定。
    • 基本思想:通过分组处理,先对间隔较大的序列进行插入排序,再逐渐减小间隔,最终变为相邻元素的插入排序。
  5. 归并排序(Merge Sort)

    • 时间复杂度:平均情况和最坏情况均为 O(nlog⁡n)O(nlogn)。
    • 空间复杂度: O(n)O(n)。
    • 稳定性:稳定。
    • 基本思想:采用分治策略,将数组分成两半递归地排序,然后合并两个已排序的部分。
  6. 快速排序(Quick Sort)

    • 时间复杂度:平均情况为 O(nlog⁡n)O(nlogn),最坏情况下为 O(n2)O(n2)。
    • 空间复杂度: O(log⁡n)O(logn)。
    • 稳定性:不稳定。
    • 基本思想:选择一个基准值,将数组分为左右两部分,左边部分小于基准值,右边部分大于基准值,然后递归地对左右两部分进行快速排序。
  7. 堆排序(Heap Sort)

    • 时间复杂度:平均情况和最坏情况均为 O(nlog⁡n)O(nlogn)。
    • 空间复杂度: O(1)O(1)。
    • 稳定性:不稳定。
    • 基本思想:利用堆这种数据结构进行排序,首先将待排序的数组构建成一个大顶堆,然后将堆顶元素与最后一个元素交换位置,并调整剩余元素的堆,直到全部排好序。
  8. 计数排序(Counting Sort)

    • 时间复杂度: O(n+k)O(n+k),其中 kk 是最大值减去最小值加一。
    • 空间复杂度: O(k)O(k)。
    • 稳定性:稳定。
    • 基本思想:通过计数每个数值出现的次数来确定其最终位置。
  9. 桶排序(Bucket Sort)

    • 时间复杂度:平均情况为 O(n+k)O(n+k),其中 kk 是桶的数量。
    • 空间复杂度: O(k)O(k)。
    • 稳定性:稳定。
    • 基本思想:将待排序的数值分布到有限数量的桶中,然后分别对每个桶中的数值进行排序,最后合并各个桶中的数值。
  • 时间复杂度:平均情况和最坏情况均为 O(nlog⁡k)O(nlogk),其中 kk 是基数的最大位数。
  • 空间复杂度: O(n+k)O(n+k)。
  • 稳定性:稳定。
  • 基本思想:基于数字的每一位进行排序,从最低位到最高位依次进行处理。

这些排序算法各有优缺点,在实际应用中应根据具体需求选择合适的算法。

标签:总结,Sort,复杂度,稳定性,算法,n2,排序
From: https://blog.csdn.net/qq_64903447/article/details/140826596

相关文章

  • 【基础算法】前缀和和差分
    前缀和和差分前缀和一维前缀和二维前缀和差分一维差分二维差分前缀和前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而差分可以看成前缀和的逆运算。合理的使用前缀和与差分,可以将某些复杂的问题简单化。一维前缀和前缀和算法有什么好处呢?先了......
  • telegraf 常用命令总结
    本文为博主原创,转载请注明出处:Telegraf是一个灵活的服务器代理,用于收集和报告指标。它支持插件驱动,这意味着你可以根据需要添加或修改功能。1.使用telegraf--help查看telegraf提供的相关命令和参数使用telegraf--help可以查看telegraf提供的相关命令和参数,具体如......
  • 常见的排序算法(Java实现)
      一、冒泡排序      相邻的两个元素比较,大的放右边,小的放左边。二、选择排序   从0索引开始,把每一个索引依次跟后面的索引比较,大的放后面,小的放前面三、插入排序  将数组分为有序和无须两种,遍历数组将无须的数组插入有序的数组当中四、快......
  • springboot+vue基于协同算法的电影推荐系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着互联网的飞速发展,网络视频平台已成为人们日常生活中不可或缺的一部分,尤其是电影观看的主要渠道。然而,面对海量的电影资源,用户往往难以快速找到符合自己喜好的影片,这不仅降低了用户体验,也限制了电影内容的有效传播。传统的推荐系统......
  • springboot+vue基于协同过滤算法的新闻推荐系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景在信息爆炸的时代,互联网上的新闻资讯以惊人的速度增长,用户在面对海量新闻时往往感到无所适从,难以快速筛选出符合个人兴趣与需求的内容。传统的新闻浏览方式已难以满足用户个性化、高效化的信息获取需求。因此,开发一种能够智能推荐个性......
  • 8.1第三周周四学习总结
    1cfdiv951位运算(异或)https://www.luogu.com.cn/problem/CF1979B思路[l,r]=[l1,r1]^(x^y)也就是是找x^y异或一个区间后仍然能够连续,对于x^y可以写成xxxx1000,xxxx设为A,为一段01序列,那么就是区间[0,x^y-A-1]能够保证连续。因为第一个1右侧都是0,都不进位,1000+0000,100......
  • UDS学习总结
    1UDS简介1.1什么是UDSUDS(UnifiedDiagnosticServices)统一诊断服务,是车辆诊断的一种应用层协议,面向整车所有ECU,UDS协议ISO14229定义了应用层和会话层,在协议里面定义了诊断的请求,诊断响应的报文格式,以及ECU怎样处理诊断请求报文,以及诊断服务的应用。它不关心底层数据链路......
  • 假的字符串 Trie+拓扑排序
    假的字符串Trie+拓扑排序题目链接题意:给定n个字符串,互不相等,你可以任意指定字符之间的大小关系(即重定义字典序),求有多少个串可能成为字典序最小的串,并输出它们。思路:我们可以对每个字符串单独判断,考虑当前\(s_i\)为字典序最小的串。那么首先要满足的条件就是\(s_i\)的前......
  • LeetCode 3111. 覆盖所有点的最少矩形数目(贪心、排序)
    题目:3111.覆盖所有点的最少矩形数目思路:只需关注横坐标,对横坐标进行升序排序,然后进行贪心,求得最少的矩阵数量classSolution{public:intminRectanglesToCoverPoints(vector<vector<int>>&points,intw){vector<int>v;for(inti=0;i<poi......
  • java算法递归算法之选择排序
    快速排序的原理就是将数组进行分区,分为三个区,然后如果每个区都是有序数组的话,就已经达成了我们的目标小于基准值的数组组成的子数组基准值大于基准值的数组组成的子数组因此我们需要重复以上的步骤,分别对1和3也选择基准值进行分区,直到数组中最后只剩0个或者1个,那么就达到目标......