希尔排序

希尔排序(Shell’s Sort)顾名思义,是一个叫Shell的人发明的算法。希尔排序又称为”缩小增量排序”,是针对直接插入的一种极端情况的优化。

希尔排序的时间复杂度经过计算,大概是0(N^1.3)
直接插入排序的时间复杂度是O(n²),但是如果待排序列有序的话,插入排序的时间复杂度可以达到O(n),所以如果待排序列是接近有序的话,那么直接插入的效率就可以大大提到了。

希尔排序的基本思想将待排序列分成若干个子序列,分别对其采用直接插入,等待排序列基本有序时,在对全体记录进行一次直接插入排序。
在这里插入图片描述

因为采用了分组排序的思想,所以每个关键字都是在和同一子序列的前一个记录的关键字进行比较。这样关键字较小的记录就不是一步一步地往前挪动,而是”跳跃式”地往前移动。
当最后一次进行增量为1的排序时,因为整个序列已经是接近有序了,所以只需进行少量移动即可。时间复杂度较之直接插入是降低了。

void ShellSort(int* arr, int n)
{
	int i = 0;
	int tmp = 0;
	int gap = n;//gap是增量
	int end = 0;
	assert(arr);
	while(gap>1)
	{
	gap = gap/3 + 1;//加一是为了保证最后一次增量唯一,进行一次插入排序
	for(i=0; i<n-gap; ++i)
	{
		end = i;
		tmp = arr[end+gap];
		while(end>=0 && arr[end]>tmp)
		{
			arr[end+gap] = arr[end];
			end -= gap;
		}
		arr[end+gap] = tmp;
	}
	}
}

void SelectSort1(int* arr, int n)
{
	int i = 0;
	int begin = 0;
	int end = n-1;
	int min = 0;
	assert(arr);
	while(begin<end)
	{
		min = begin;
		for(i=begin;i<=end; i++)
		{
			if(arr[i] < arr[min])
			min = i;
		}
		Swap(&arr[begin], &arr[min]);
		Print(arr,n);
		begin++;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值