冒泡排序和希尔排序(三十一)
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,在上节博客中,我们学习了插入排序和选择排序,那么本次我们继续学习冒泡排序和希尔排序。什么是冒泡排序呢?它是每次从后向前进行(假设为第 i 次),j = n - 1, n - 2, ... , i, 两
千家信息网最后更新 2025年12月03日冒泡排序和希尔排序(三十一)
在上节博客中,我们学习了插入排序和选择排序,那么本次我们继续学习冒泡排序和希尔排序。什么是冒泡排序呢?它是每次从后向前进行(假设为第 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安全错误
数据库的锁怎样保障安全
广东私有云空间定制云服务器
数据库当中非负且非空怎么表示
华为服务器温度多少
福建软件开发加盟商代理价格
白城app软件开发
成都直销软件开发公司哪个好
重庆软件开发技术
网络安全中心 日本
东阿im即时通讯软件开发
网络安全 免费下载
我的世界服务器手机版推荐部落战
苹果手机服务器连接失败
天涯明月刀服务器人物查询
php服务器空间
8uftp服务器
天津市教育网络安全
服务器端防火墙
电脑屏保服务器管理软件
滨州智慧党建软件开发公司
网络安全商务
延庆区网络技术服务概况
济南市浪潮服务器销售电话
硬件更换服务器
用与管理服务器
update不更新数据库
计算机等级考试网络技术四级
微信服务器更新时间
网络技术工程师 华为 工资
肇庆oa软件开发常见问题
ebsco数据库怎么用