当前位置: 首页 > news >正文

C++编程 希尔排序

步骤:
1.先选定一个小于N的整数gap作为第一增量,然后将所有距离为gap的元素分在同一组,并对每一组的元素进行直接插入排序。然后再取一个比第一增量小的整数作为第二增量,重复上述操作…
2.当增量的大小减到1时,就相当于整个序列被分到一组,进行一次直接插入排序,排序完成。
动图如下:

#include<iostream>
using namespace std;
int x[10]={44,534,6,53,96,7,56,8,76,3};void shuchu(){for(int i=0;i<10;i++){cout<<x[i]<<" ";}cout<<endl;
}//插入排序 
void b(int gap) {//对 间隔维gap的子数组进行 插入排序,如果gap==1 即是最纯的插入排序 for(int i=0;i<10;i++){	int end=i;int temp=x[end];	while(end-gap>=0){if(x[end-gap]>temp){x[end]=x[end-gap];end-=gap;}else break;}x[end]=temp;}
}
//希尔排序 
void a(int n){int gap=n/2;while(1){		b(gap);if(gap==1)return;else gap/=2;}
}int main()
{shuchu();//b(1);//如果gap==1 即是最纯的插入排序  a(10);shuchu();
}

参考代码:六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序-CSDN博客

//希尔排序
void ShellSort(int* arr, int n)
{int gap = n;while (gap>1){//每次对gap折半操作gap = gap / 2;//单趟排序for (int i = 0; i < n - gap; ++i){int end = i;int tem = arr[end + gap];while (end >= 0){if (tem < arr[end]){arr[end + gap] = arr[end];end -= gap;}else{break;}}arr[end + gap] = tem;}}
}

http://www.xdnf.cn/news/54523.html

相关文章:

  • 状态管理最佳实践:Provider使用技巧与源码分析
  • 【C语言函数部分的重要知识点】--自定义函数,static和extern
  • 【题解-JSOI】JSOI2009 配菜
  • 【连接池-55.1】深入解析Druid连接池:高性能Java数据库连接池的最佳实践
  • Python 爬虫案例
  • Dubbo QoS操作手册
  • Spring 01
  • 前端与传统接口的桥梁:JSONP解决方案
  • 大数定理(LLN)习题集 · 答案与解析篇
  • QCPAxis、QCPGrid 和 QCPAxisTicker 三者关系
  • 关于隔离2:ADC芯片
  • 京东 h5st 5.1 详情 京东滑块 cfe 分析
  • Cursor工具你会用了吗
  • leetcode0078. 子集-medium
  • stm32 13位时间戳转换为时间格式、对时
  • Day58 | 179. 最大数、316. 去除重复字母、334. 递增的三元子序列
  • Linux系统的远程终端登录、远程图形桌面访问、 X图形窗口访问
  • 无回显RCE
  • 每日一道leetcode(补充版)
  • 具身智能零碎知识点(四):联合嵌入预测架构(JEPAs)详解
  • acwing--动态规划【线性dp】4/20、4/21
  • 网页的URL绝对路径和相对路径,以及各自的使用场景
  • 【Vulkan 入门系列】创建逻辑设备和图形、呈现队列,显示尺寸更改(三)
  • 错误: 找不到或无法加载主类 HelloWorld,cmd窗口,java命令,提示
  • PT站中的tracker
  • LangChain4j语言模型选型指南:主流模型能力全景对比
  • 生成式AI对话中提示词策略:明确问题、明确目标和提供背景信息是最有效的策略
  • 【CPU】中断即时性
  • leetcode(01)森林中的兔子
  • 机器学习(神经网络基础篇)——个人理解篇6(概念+代码)———参数优化篇