首页 > 编程语言 >算法分析与设计——冒泡排序,选择排序,STL自带sort函数性能比较实验

算法分析与设计——冒泡排序,选择排序,STL自带sort函数性能比较实验

时间:2023-03-25 13:22:13浏览次数:52  
标签:sort STL 用时 冒泡排序 数据量 排序

实验环境:
Win11,Dev c++5.11
实验方法:
生成不同数据量的随机数后使用三种排序方法分别排序,比较每种方法所耗时长。
实验结果:
数据量为1000时,冒泡排序平均用时为0.015s,选择排序平均用时为0.01s,STL自带sort函数平均用时显示为0s(过快无法测出)。
数据量为10000时,冒泡排序平均用时为0.155s,选择排序平均用时为0.103s,STL自带sort函数平均用时为0.009s。
数据量为100000时,冒泡排序平均用时为22.488s,选择排序平均用时为14.3532s,STL自带sort函数平均用时为0.015s。
结果解释:
从算法的时间复杂度上看,冒泡排序为O(n^2),选择排序为O(n^2),STL自带sort函数为O(nlogn),因而sort函数的排序性能明显优于前两种排序方法。
从原理上看,选择排序在每一次的遍历中只会有一次交换操作,而冒泡排序中可能存在多次交换操作,因而选择排序在大型数据集中的性能更好。
其他:
sort并不是简单的快速排序,它对快速排序进行了优化。此外,它还结合了插入排序和推排序。系统会根据数据形式和数据量自动选择合适的排序方法。它每次排序中不只选择一种方法,比如给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段之后每一段的数据量达到一个较小值后它就不继续往下递归,而是选择插入排序,如果递归的太深,他会选择推排序。

标签:sort,STL,用时,冒泡排序,数据量,排序
From: https://www.cnblogs.com/yuooo/p/17254570.html

相关文章

  • CF EC Round 145 D. Binary String Sorting
    D题意给一个01串,交换两个数需要花费\(10^{12}\),删除某个数需要花费\(10^{12}+1\),问最少花费多少使得串单调不降思路线性dp,\(f[i][0]\)表示前i位构建的串结尾为0,单调......
  • 设置Mysql sort_buffer_size参数
    按照官网的解释:Eachsessionthatmustperformasortallocatesabufferofthissize.sort_buffer_sizeisnotspecifictoanystorageengineandappliesinag......
  • C++ 标准库 sort() / stable_sort() / partial_sort() 对比
    C++STL标准库中提供了多个用于排序的Sort函数,常用的包括有sort()/stable_sort()/partial_sort(),具体的函数用法如下表所示:函数用法std::sort(first,last)......
  • 天梯赛练习题 L3-002 特殊堆栈(stl)
    https://pintia.cn/problem-sets/994805046380707840/exam/problems/994805053695574016输入样例:17PopPeekMedianPush3PeekMedianPush2PeekMedianPush1PeekM......
  • 冒泡排序
    premise数组里找最大值arr=[1,3,2,5,4]方法:找到第一个值为max=arr[0]与第二个值arr[1]对比,哪个大就把它重新赋值给max,再与第三个值对比,以此类推?对一......
  • stlren和sizeof()区别
    strlen函数和sizeof运算符都可以用来计算字符串的长度,但它们的作用不同。strlen函数的作用是计算字符串的长度,不包括字符串末尾的空字符。例如,如果有一个字符串"hello",那么......
  • Python基础之sorted()函数用法
    1、简单的排序sorted函数可以对可迭代类型的容器内的数据进行排序lst1=(5,4,3,2,1)lst2=('F','D','Y','e','a','v')#字符串类型的排序按照ASCII的大小进行比较L1......
  • 8086汇编语言学习1-loop循环实现冒泡排序
    关键点:  1.loop指令的原理、断点位置  2.条件转移指令JNLE(小于或等于)和JG(大于)、与CMP(比较)一起使用DATASEGMENTAdw1,3,4,2,5DATAENDSCODESEGMENT......
  • 8086汇编语言学习1-loop循环实现冒泡排序
    关键点:  1.loop指令的原理、断点位置  2.条件转移指令JNLE(小于或等于)和JG(大于)、与CMP(比较)一起使用DATASEGMENTAdw1,3,4,2,5DATAENDSCODESEGMENT AS......
  • 算法笔记的笔记——第6章 C++标准模板库(STL)
    vector变长数组长度根据需要而自动改变的数组可以用来以邻接表的方式储存图使用头文件:#include<vector>命名空间:usingnamespacestd;定义vector<typename>n......