冒泡排序和希尔排序(三十一)
发表于:2024-09-27 作者:千家信息网编辑
千家信息网最后更新 2024年09月27日,在上节博客中,我们学习了插入排序和选择排序,那么本次我们继续学习冒泡排序和希尔排序。什么是冒泡排序呢?它是每次从后向前进行(假设为第 i 次),j = n - 1, n - 2, ... , i, 两
千家信息网最后更新 2024年09月27日冒泡排序和希尔排序(三十一)
在上节博客中,我们学习了插入排序和选择排序,那么本次我们继续学习冒泡排序和希尔排序。什么是冒泡排序呢?它是每次从后向前进行(假设为第 i 次),j = n - 1, n - 2, ... , i, 两两比较 V[j-1] 和 V[j] 的关键字;如果发生逆序,则交换 V[j-1] 和 V[j]。下来我们看看第 i 次冒泡排序示例,如下图所示
我们来看看具体是怎么实现的,如下所示
我们看到它是两两比较,小的放在前面。类似于冒水泡,轻的漂浮在上面。下来我们来看看具体源码的实现
template < typename T >static void Bubble(T array[], int len, bool min2max = true){ bool exchange = true; for(int i=0; (ii; j--) { if( min2max ? (array[j] < array[j-1]) : (array[j] > array[j-1]) ) { Swap(array[j], array[j-1]); exchange = true; } } }}
测试代码如下
#include#include "Sort.h"using namespace std;using namespace DTLib;int main(){ int array[] = {3, 2, 4, 1, 5}; Sort::Bubble(array, 5); for(int i=0; i<5; i++) { cout << array[i] << endl; }}
我们来看看运行结果
我们来试试在 Bubble 后面加上 false 参数,看看效果
下来我们来继续看看希尔排序,那么它的基本思想是什么呢?将待排序列划分为若干组,在每一组内进行插入排序,以使整个序列基本有序,然后再对整个序列进行插入排序。希尔排序示例如下
我们来看看具体是怎么实现的,如下所示
它是利用插入排序来实现的,之所以这么实现,是因为这样的效率比之前的几种能高点。下来我们来看看具体源码的实现
template < typename T >static void Shell(T array[], int len, bool min2max = true){ int d = len; do { d = d / 3 + 1; // 之所以这样写是因为经过数学推导,这样的效率是最高的。也可以写成 d--; for(int i=d; i=0) && (min2max ? (array[j]>e) : (array[j] 1 );}
我们先来看看不加参数 false的效果(从小到大排序)
再来看看从大到小的排序
我们看到已经正确实现了。通过对冒泡排序和希尔排序的学习,总结如下:1、冒泡排序每次从后向前将较小的元素交互到位;2、冒泡排序是一种稳定的排序方法,其复杂度为O(n2);3、希尔排序通过分组的方式进行多次插入排序,它是一种不稳定排序,其复杂度为O(n3/2)。
排序
希尔
学习
复杂
之所以
参数
复杂度
序列
效果
效率
源码
示例
最高
有序
从小到大
从小
代码
元素
关键
关键字
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
i9软件开发有必要吗
金蝶的数据库怎么下载
南方基金软件开发
传说对决先行服务器维护
10m带宽的服务器
高考必备这个软件开发者
人类如何破坏水的数据库
网络安全与信息化 法院
驻马店软件开发技巧
广东服务器续保维护
邯郸正规软件开发大概多少钱
购置新服务器采购申请
软件开发项目管理总结报告
软件开发的都用苹果吗
如何查找服务器是谁的
计算机网络技术基础试题
安徽常见软件开发厂家报价
网络安全和网络生态
网上起名软件开发
北京互联网科技有限公司在哪个区
郴州市学计算机软件开发学校
黑龙江云端服务器托管服务器
邯郸正规软件开发大概多少钱
乡镇政府网络安全汇报材料
求生之路2联机什么服务器延迟低
直播视频服务器 搭建
山东安卓软件开发定制费用
组态王数据库数据能修改不
matlab 数据库
aix备份db2数据库