冒泡排序和希尔排序(三十一)
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,在上节博客中,我们学习了插入排序和选择排序,那么本次我们继续学习冒泡排序和希尔排序。什么是冒泡排序呢?它是每次从后向前进行(假设为第 i 次),j = n - 1, n - 2, ... , i, 两
千家信息网最后更新 2025年01月31日冒泡排序和希尔排序(三十一)
在上节博客中,我们学习了插入排序和选择排序,那么本次我们继续学习冒泡排序和希尔排序。什么是冒泡排序呢?它是每次从后向前进行(假设为第 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安全错误
数据库的锁怎样保障安全
山东潍坊国家网络安全宣传
小数据库建设
山西司法网络安全
初中生网络安全教育讲座
shell怎么跨服务器拉取文件
超市系统数据库安全
alt数据库 蛋白
网络技术转让哪个好
上海贺芮网络技术有限公司
网络安全履行义务
计算机网络技术运动会口号
我的世界生化危机多人联机服务器
细胞涂片数据库
服务器安全狗免费下载
济南达森互联网科技
数据库rowid排序
ma5608t空数据库
软件开发公司起什么名字合适
市南区平台软件开发推荐
服务器后端技术栈外包技术
dubbo服务器
法莱贝克软件开发大连有限公司
金山区上门软件开发定制要求
山西java软件开发诚信企业
网络安全的威胁与攻击归纳
欧洲网络安全公司
国研网宏观经济对外贸易数据库
中移软件开发 难进
欧洲文献检索数据库
政务软件开发公司排名