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

SCAU8640--希尔排序

8640 希尔(shell)排序

时间限制:1000MS  代码长度限制:10KB
提交次数:1858 通过次数:1304

题型: 编程题   语言: G++;GCC

Description

用函数实现希尔(shell)排序,并输出每趟排序的结果,初始增量d=n/2,其后d=d/2



 

输入格式

第一行:键盘输入待排序关键的个数n
第二行:输入n个待排序关键字,用空格分隔数据


 

输出格式

每行输出一趟排序结果,数据之间用一个空格分隔


 

输入样例

10
5 4 8 0 9 3 2 6 7 1


 

输出样例

3 2 6 0 1 5 4 8 7 9
1 0 3 2 4 5 6 8 7 9
0 1 2 3 4 5 6 7 8 9
#include <iostream>
#include <vector>
using namespace std;// 希尔排序函数
void shellSort(vector<int>& arr) {int n = arr.size();// 初始增量为 n / 2,每趟减半for (int d = n / 2; d > 0; d /= 2) {// 对每个步长d进行插入排序for (int i = d; i < n; ++i) {int key = arr[i];int j = i;// 对 d 间隔的子序列做插入排序while (j >= d && arr[j - d] > key) {arr[j] = arr[j - d];j -= d;}arr[j] = key;}// 输出当前排序结果for (int i = 0; i < n; ++i) {cout << arr[i];if (i < n - 1) cout << " ";}cout << endl;}
}int main() {int n;cin >> n;vector<int> arr(n);// 输入数据for (int i = 0; i < n; ++i) {cin >> arr[i];}// 执行希尔排序shellSort(arr);return 0;
}

 

希尔排序(Shell Sort)是插入排序的一种改进版本,由 Donald Shell 在 1959 年提出。它主要是为了克服普通插入排序在数据量大时效率低的问题,通过分组让数据更快地接近有序。


🧠 原理简介:

希尔排序的核心思想是:

先将整个待排序的序列按某个“步长(gap)”分成若干组,对每组分别进行插入排序。随后逐渐减小步长,再次进行分组插入排序,最终步长减小到 1 时,整个序列已经基本有序,再做一次插入排序就可以很快完成。


🔁 步骤演示(假设 n=10):

输入序列:

5 4 8 0 9 3 2 6 7 1
  1. 第一轮:gap = n / 2 = 5
    分成 5 组进行插入排序:

    • 第1组: 5 3

    • 第2组: 4 2

    • 第3组: 8 6

    • 第4组: 0 7

    • 第5组: 9 1
      排完得到(示例):

    3 2 6 0 1 5 4 8 7 9
    
  2. 第二轮:gap = 2
    对间隔为 2 的元素进行插入排序

  3. 第三轮:gap = 1(即普通插入排序)
    数组已经基本有序,这一步非常快。

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

相关文章:

  • 产品设计法则:用「人性引擎」驱动7层产品进化
  • OVD开放词汇检测中COCO数据集的属性
  • 数论——约数和倍数
  • 平滑技术(数据处理,持续更新...)
  • 提升嵌入式软件调试效率的核心方
  • 什么是煤矿智能掘进
  • 第七章.正则表达式
  • 【03】完整开发腾讯云播放器SDK的UniApp官方UTS插件——优雅草上架插件市场-卓伊凡
  • 腾讯位置商业授权沿途搜索服务开发指南
  • c++ delete实现动作
  • Netty学习example示例
  • RAG的ETL Pipeline源码解读
  • 科技类专著写作与出版过程
  • 【java面试】MySQL篇
  • Python Day40 学习(复习学习日志Day5-7)
  • make_unique
  • 基于LangChain的AI助手开发:从零到上线
  • 案例:TASK OA
  • Pycharm的终端无法使用Anaconda命令行问题详细解决教程
  • 兰亭妙微十六年高水准交互设计公司
  • php 各版本下载
  • 探索大语言模型(LLM):RSE流程详解——从文档中精准识别高相关片段
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Form Wave(表单label波动效果)
  • 力扣刷题(第四十五天)
  • navicate菜单栏不见了怎么办
  • cursor如何开启自动运行模式
  • PH热榜 | 2025-05-31
  • Docker常用命令详解与高效记忆指南
  • Android Studio历史版本下载地址汇总
  • 【软件测试】web自动化:Pycharm+Selenium+Firefox(一)