希尔排序

希尔排序

希尔排序是基于插入排序思想上的,也是基于插入排序代码实现的。

希尔排序的流程:

其实当元素个数为奇数和偶数时,没太大区别,只是分段的多一个少一个罢了。

当需排序元素为奇数时:

当需排序元素为偶数时:

代码示例:

代码实现就是在插入排序的代码上进行操作,加入了一个jump,然后将代码中的1全部替换为jump。

void shell_sort(int parr[], int len)	//希尔排序
{
	int	j;
	int tempval;
	int jump = len >> 1;	//jump为数组长度一半的大小
	while (jump != 0)	//循环插入
	{
		for (int i = jump; i < len; ++i)
		{
			tempval = parr[i]; 
			j = i - jump; 
			while (j >= 0 && tempval < parr[j])
			{
				parr[j + jump] = parr[j];
				j = j - jump;
			}
			parr[j + jump] = tempval;
		}
		jump >>= 1;	//jump除等于2
	}
}
posted @ 2022-03-04 21:59  宣哲  阅读(106)  评论(0编辑  收藏  举报