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

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.lqws.cn/news/83251.html

相关文章:

  • 【知识点】第3章:基本数据类型
  • Python基础入门:开启编程之旅
  • 【算法训练营Day05】哈希表part1
  • vue router详解和用法
  • 数学建模期末速成 多目标规划
  • B1039 PAT乙级JAVA题解 到底买不买
  • 自定义序列生成器之单体架构实现
  • 截图工具 Snipaste V2.10.7(2025.06.2更新)
  • day 43
  • 【操作系统·windows快捷键指令】
  • STM32:CAN总线精髓:特性、电路、帧格式与波形分析详解
  • 在考古方向遥遥领先的高校课程建设-250602
  • Python Day40 学习(复习学习日志Day5-7)
  • 《QDebug 2025年5月》
  • 简单工厂模式
  • [蓝桥杯]交换次数
  • 强化学习-深度学习和强化学习领域
  • NLP学习路线图(十八):Word2Vec (CBOW Skip-gram)
  • 移动AI神器GPT Mobile:多模型自由切换
  • 三种经典算法优化无线传感器网络(WSN)覆盖(SSA-WSN、PSO-WSN、GWO-WSN),MATLAB代码实现
  • 【HW系列】—安全设备介绍(开源蜜罐的安装以及使用指南)
  • 【Linux系列】Gunicorn 进程架构解析:主进程与工作进程
  • CTF:网络安全的实战演练场
  • 调整数据集的方法
  • Playwright Python API 测试:从入门到实践
  • IBM 与嘉士伯(Carlsberg)携手推进 SAP S/4HANA 数字化转型,打造啤酒行业新范式
  • 【机器学习】支持向量机(SVM)
  • Spring Cloud 2025 正式发布啦
  • 数据库管理-第332期 大数据已死,那什么当立?(20250602)
  • c++继承