排序算法(总结)-C++

devtools/2024/9/23 10:19:00/

篇幅较长请耐心看完

C++ 中实现算法>排序算法有多种方式,这些算法各有优缺点,适用于不同的场景。以下是一些经典的算法>排序算法及其简要说明和C++代码实现的概述:

冒泡排序 ( B u b b l e S o r t Bubble Sort BubbleSort)

• 原理:通过重复遍历要排序的数列,比较每对相邻元素的值,如果顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
• 复杂度:平均时间复杂度 O ( n 2 ) O(n^2) O(n2),最好情况 O ( n ) O(n) O(n),最坏情况 O ( n 2 ) O(n^2) O(n2),空间复杂度 O ( 1 ) O(1) O(1)

选择排序 ( S e l e c t i o n S o r t Selection Sort SelectionSort)

• 原理:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
• 复杂度:无论最好、最坏还是平均情况,时间复杂度均为 O ( n 2 ) O(n^2) O(n2),空间复杂度 O ( 1 ) O(1) O(1)

插入排序 ( I n s e r t i o n S o r t Insertion Sort InsertionSort)

• 原理:把待排序的数组分成已排序和未排序两部分,初始时已排序部分只包含第一个元素,然后依次从未排序部分取出元素插入到已排序部分的正确位置。
• 复杂度:最好情况 O ( n ) O(n) O(n),最坏情况 O ( n 2 ) O(n^2) O(n2),平均情况 O ( n 2 ) O(n^2) O(n2),空间复杂度 O ( 1 ) O(1) O(1)

希尔排序 ( S h e l l S o r t Shell Sort ShellSort)

• 原理:是插入排序的一种更高效的版本,通过将原始数据分割成若干子序列,先让这些子序列基本有序,然后再对全体记录进行一次直接插入排序。
• 复杂度:取决于间隔序列的选择,最坏情况可以达到 O ( n 2 ) O(n^2) O(n2),但通过好的间隔序列选择,可以降低到 O ( n l o g n ) O(nlogn) O(nlogn)

归并排序 ( M e r g e S o r t Merge Sort MergeSort)

• 原理:采用分治法的思想,将数组分成两半分别排序,再将结果合并在一起。这是一个递归过程。
• 复杂度:时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn),空间复杂度 O ( n ) O(n) O(n)

快速排序 ( Q u i c k S o r t Quick Sort QuickSort)

• 原理:也是分治法,选择一个基准元素,通过一趟排序将待排记录分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序。
• 复杂度:平均时间复杂度 O ( n O(n O(n l o g log log n ) n) n),最坏情况 O ( n 2 ) O(n^2) O(n2),但通过随机选取基准可以优化至几乎总是 O ( n O(n O(n l o g log log n ) n) n),空间复杂度 O ( l o g O(log O(log n ) n) n)

堆排序 ( H e a p S o r t Heap Sort HeapSort)

• 原理:利用堆这种数据结构所设计的一种算法>排序算法。将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。
• 复杂度:时间复杂度 O ( n O(n O(n l o g log log n ) n) n),空间复杂度 O ( 1 ) O(1) O(1)

计数排序 ( C o u n t i n g S o r t Counting Sort CountingSort)

• 原理:是一种非比较型整数算法>排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,它对于小范围内的整数排序非常高效。
• 复杂度:时间复杂度 O ( n + k ) O(n+k) O(n+k),其中k为待排序数组中最大数与最小数的差值加 1 1 1,空间复杂度O ( n + k ) (n+k) (n+k)
这些算法在实际应用中,根据数据的特点和需求(如数据量大小、是否原地排序、稳定性要求等)选择最适合的算法

快排

C + + C++ C++标准库中,也提供了高效的排序函数
std::sort,它通常使用的是某种形式的快速排序,并且在特定情况下会自动切换到其他算法以保持高性能。


C++/Python算法>排序算法
有一部分是已经出了文的,剩下的我会努力肝的!


http://www.ppmy.cn/devtools/22786.html

相关文章

Elasticsearch实现hotel索引库自动补全、拼音搜索功能

Elasticsearch实现hotel索引库自动补全、拼音搜索功能 在这里边我们有两个字段需要用拼音分词器,一个name字段,一个all字段。 然后我们还需要去实现自动补全,而自动补全对应的字段必须使用completion类型。目前我们酒店里面所有的字段都采用的…

Day27:阻塞队列、Kafka入门、发送系统通知、显示系统

阻塞队列BlockingQueue BlockingQueue 解决线程通信的问题。阻塞方法:put、take。 生产者消费者模式 生产者:产生数据的线程。消费者:使用数据的线程。 (Thread1生产者,Thread2消费者) 实现类 ArrayBlockingQueueLinkedBlockingQueuePr…

PDF高效编辑器,一键转换将PDF文件转换成HTML文件,开启文件处理新篇章!

文件格式的转换与处理已成为我们日常工作中不可或缺的一部分。为了满足广大用户对高效、便捷文件处理的需求,我们荣幸地推出了全新的PDF高效编辑器——PDF到HTML一键转换工具!这款工具将为您带来前所未有的文件处理体验,让您轻松驾驭文件格式…

不同状态空间模型的实验对比(二)

对五个下游任务进行了实验比较,包括单/多标签分类、视觉对象跟踪、像素级分割、图像到文本生成和人/车辆再识别。 论文:https://arxiv.org/abs/2404.09516 作者单位:安徽大学、哈尔滨工业大学、北京大学更多相关工作将在以下GitHub上不断更新…

All in One mini主机搭建全屋主路由方案----自己实现自己的路由器,实现路由器自由!

1 接线 首先,需要保证家里当前状态是有网的状态(路由器有网并正常工作) 将鼠标键盘接在mini主机的USB口,HDMP/DP/VGA等接上显示器。从路由器的lan口接一根网线出来接在mini主机的ETH0上,接在mini主机上保证mini主机在…

短期动态IP介绍

IP代理作为一门新兴的网络技术,备受市场与用户的青睐。主要是帮助用户解除地域限制,登录海外网站,浏览海外用户信息。 代理商实际上是依托于海外服务器,将国内IP地址通过代理服务器隐匿后替换为海外IP地址,再由代理服…

每天一个数据分析题(二百九十七)

帮助了解当前每个维度项的业务行为结果的整体情况的是哪种指标计算方法? A. 常规求和 B. 累计求和 C. 常规计数 D. 非重复计数 题目来源于CDA模拟题库 点击此处获取答案 cda数据分析考试:点击进入

百度竞价开户详解:步骤、优势与注意事项

随着互联网的普及,网络营销已成为企业不可或缺的一部分。其中,百度竞价作为一种高效的网络推广方式,受到了越来越多企业的青睐。本文将详细介绍百度竞价开户的流程、优势以及注意事项,帮助企业更好地利用这一工具提升品牌知名度和…