当前位置:首页 > 芯闻号 > 充电吧
[导读]思想简单描述:在直接插入排序算法中,每次插入一个数,使有序序列只增加1个节点,并且对插入下一个数没有提供任何帮助。如果比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能

思想简单描述:

在直接插入排序算法中,每次插入一个数,使有序序列只增加1个节点,并且对插入下一个数没有提供任何帮助。如果比较

相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换。D.L.shell于

1959年在以他名字命名的排序算法中实现了这一思想。算法先将要排序的一组数按某个增量d分成若干组,每组中记录的

下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到1时,整个

要排序的数被分成一组,排序完成。下面有几种用C语言实现的方法:

方法一:

严格按照定义来实现的算法


void ShellSort1(int *array, int len)
{
	int i, j, grap, k, tmp;
	for(grap=len/2; grap>0; grap/=2)//步长
	{
		for(i=0; i<grap; i++)//直接插入排序
		{
			for(j=i+grap; j<len; j+=grap)
			{
				if (array[j]=0 && array[k]>tmp)
					{
						array[k+grap] = array[k];
						k -= grap;
					}
					array[k+grap] = tmp;
				}
			}
		}
	}
}

方法二:代码量太大了,不够简洁清晰。因此进行下改进和优化



void ShellSort2(int *array, int len)
{
	int i,j,grap,tmp,k;
	
	for(grap=len/2; grap>0; grap /=2)
	{
		for(j=grap; j<len; j++)//从数组第gap个元素开始
		{
			if (array[j]<array[j-grap])//每个元素与自己组内的数据进行直接插入排序 
			{
				tmp = array[j];
				k = j-grap;
				while(k>=0 && tmp<array[k])
				{
					array[k+grap] = array[k];
					k = k-grap;
				}
				array[k+grap] = tmp;
			}
			
		}
	}
}

方法三:在将以上的代码进行下改进



void ShellSort3(int *array, int len)
{
	int i,j,k,tmp;
	
	for(k=len/2; k>0; k/=2)
	{
		for(i=k; i=0 && array[j]>tmp; j-=k)
			{
				array[j+k] = array[j];
			}
			array[j+k] = tmp;
		}
	}
}

方法四:还可以再次优化:



void ShellSort4(int *array, int len) 
{
	int i,j,gap;
	for(gap=len/2; gap>0; gap/=2)
	{
		for(i=gap; i=0 && array[j]>array[j+gap]; j-=gap)
			{
				swap(&array[j], &array[j+gap]);
			}
		}
	}
}

另一种方法是根据其它论坛上进行整理的,也是比较容易理解一种方法



void ShellSort(int *array, int len)
{
	int i,j, tmp, k;
	
	k = len/2;/*间距值*/
	while(k>=1)
	{
		for(i=k; i=0 && array[j]>tmp)
			{
				array[j+k] = array[j];
				j -= k;
			}
			array[j+k] = tmp;
		}
		k = k/2;/*缩小间距值*/
	}
}

应该还会有更多,更优,更好的实现方法,由于水平有限,不足之处,还请大家多多指正!


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

随着科技的飞速进步,人工智能(AI)已经逐渐成为了引领新一轮科技革命和产业变革的核心驱动力。AI不仅在改变着我们的日常生活,还在推动各行各业的创新发展。展望未来,人工智能的发展将呈现出哪些趋势呢?本文将从技术、应用、伦理...

关键字: 人工智能 算法 AI技术

机器学习算法不会要求一个问题被 100%求解,取而代之的是把问题转化为最优化的问题,用不同的算法优化问题,从而比较得到尽量好的结果。

关键字: 机器学习 算法 最优化

据数据类型的不同,对一个问题的建模有不同的方式。在机器学习或者人工智能领域,人们首先会考虑算法的学习方式。在机器学习领域,有几种主要的学习方式。

关键字: 机器学习 人工智能 算法

NVIDIA 量子模拟平台将通过各大云提供商提供,帮助科学家推进量子计算和算法研究

关键字: 量子计算 算法 量子云

随着科技的飞速发展,人工智能(AI)已经成为当今科技研究的热点和前沿。AI的快速发展不仅带来了许多新的应用场景和商业模式,也在推动科技进步的同时,引发了一系列关于其未来发展方向和潜在影响的深入讨论。本文将对人工智能的科技...

关键字: 人工智能 AI技术 算法

机器学习算法:机器学习是一种让计算机通过学习数据和模式来改进自身算法的技术。这些算法包括监督学习、无监督学习和强化学习。

关键字: 人工智能 机器学习 算法

随着信息技术的快速发展,机器学习作为人工智能的核心技术之一,正逐渐渗透到各个领域,引领着一场前所未有的科技变革。在机器学习的实际应用中,有三大重点至关重要,它们分别是数据质量、算法选择与模型评估。本文将深入探讨这三大重点...

关键字: 机器学习 数据质量 算法

在人工智能的浪潮中,机器学习已逐渐成为推动科技进步的核心动力。机器学习技术的广泛应用,从图像识别到自然语言处理,从智能推荐到自动驾驶,都离不开其三个基本要素:数据、算法和模型。本文将深入探讨这三个基本要素在机器学习中的作...

关键字: 机器学习 算法 人工智能

随着信息技术的迅猛发展,机器学习作为人工智能的核心技术之一,已经深入到了各个领域,为我们的生活和工作带来了翻天覆地的变化。无论是智能语音助手、自动驾驶汽车,还是个性化推荐、疾病预测,这些令人惊叹的应用背后,都离不开机器学...

关键字: 机器学习 人工智能 算法

机器学习的方法是指利用统计学方法和算法让计算机自动学习模式和规律,并通过数据进行预测和决策的一门学科。机器学习的主要目标是让计算机能够从数据中自我学习,通过训练模型来提高自身的性能。机器学习的方法可以从高层次上分为监督学...

关键字: 机器学习 算法
关闭
关闭