希尔排序算法
一 概述
希尔排序(Shell Sort)是一种基于插入排序的改进算法,通过分组插入排序逐步减少元素移动次数,提升排序效率。其核心思想是“增量分组+逐步逼近有序”。
二 选择增量序列
希尔排序的核心是动态缩小增量(间隔)。通常初始增量取数组长度的一半,之后逐步减半直至为1。
本例数组[6 5 7 8 2]长度为5,增量序列为:gap = 2 ->1。
二 按增量分组并插入排序
1 第1轮:gap=2
将数组分为2个子序列(间隔为2):
子序列1:索引0、2、4 → $[6, 7, 2]$
插入排序后 → [2, 6, 7]
子序列2:索引1、3 → [5, 8]
插入排序后保持 [5, 8]
排序后数组变为: [2, 5, 6,8,7]
2 第2轮:gap=1
此时增量减为1,即对整个数组进行标准插入排序:
比较索引1的5:无需移动。
比较索引2的6:无需移动。
比较索引3的8:无需移动。
比较索引4的7:需插入到8前面 → 交换8和7。
最终有序数组: [2,5, 6, 7, 8]
三、C++代码实现
#include <iostream>
using namespace std;
void shellSort(int arr[], int n