希尔排序

本文深入解析了希尔排序算法的原理,介绍了其通过增量分组并应用直接插入排序来提高效率的独特方式。文章提供了C++实现代码示例,展示了如何计算增量序列,并通过一个具体的排序过程示例,帮助读者理解希尔排序的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,算法思想
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
2,代码实现

#include <iostream>
#include <algorithm>


using namespace std;


template<typename T>
void shellSort(T arr[], int n) {

	int h = 1;
	while (h < n / 3)
		h = 3 * h + 1;
	// 计算 increment sequence: 1, 4, 13, 40, 121, 364, 1093...

	while (h >= 1) {

		// h-sort the array
		for (int i = h; i < n; i++) {

			// 对 arr[i], arr[i-h], arr[i-2*h], arr[i-3*h]... 使用插入排序
			T e = arr[i];
			int j;
			for (j = i; j >= h && e < arr[j - h]; j -= h)
				arr[j] = arr[j - h];
			arr[j] = e;
		}

		h /= 3;
	}
}


int main() {

	int a[10] = { 10,9,8,7,6,5,4,3,2,1 };
	shellSort(a, 10);
	for (int i = 0; i < 10; i++)
		cout << a[i] << " ";
	cout << endl;

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值