冒泡排序和希尔排序(三十一)
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,在上节博客中,我们学习了插入排序和选择排序,那么本次我们继续学习冒泡排序和希尔排序。什么是冒泡排序呢?它是每次从后向前进行(假设为第 i 次),j = n - 1, n - 2, ... , i, 两
千家信息网最后更新 2026年11月01日冒泡排序和希尔排序(三十一)
在上节博客中,我们学习了插入排序和选择排序,那么本次我们继续学习冒泡排序和希尔排序。什么是冒泡排序呢?它是每次从后向前进行(假设为第 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安全错误
数据库的锁怎样保障安全
互联网科技企业
哈尔滨大商圈互联网科技有限公司
西安纸贵互联网科技有限公司
科技互联网企业
科技平台互联网
互联网下的科技发展
北京互联网科技公司
互联网科技革命
互联网科技股午盘股票涨跌
宁波青枫互联网科技有限公司
北京华百购互联网科技有限公司
黑科技闪耀互联网之光
洛阳共同富裕互联网科技有限公司
爱医互联网络科技
特约风豹互联网科技为什么扣费
保险科技服务互联网营销体系
工业互联网展湾科技股份有限公司
杭州披云加互联网科技有限公司
互联网的黑科技实验室
宁波允成互联网科技有限公司
南京欣网互联网络科技
互联网和科技技术
互联网品科技
善班互联网科技
融势互联网科技
奔汉互联网科技
荆州市昕露互联网络科技有限公司
乌苏新华互联网科技做什么的
深圳艾果互联网通讯科技
湖北辰鑫科技互联网