数据结构-排序-shellsort希尔排序

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
void show(int *arr,int sum)
{
	for (int i = 0; i < sum; i++)
		printf("%d,", arr[i]);
	printf("\n");
}

//希尔排序


void shellSorta(int * arr, int sum)//在插入排序的基础上增加一个增量,将增量的记录组成一个子序,再进行排序
/*arr[10] = { 0,9,1,5,8,3,7,4,6,2 };
increment为4时
         {9,3,2}为1组 所以(比较9-2的时候,2要插入到3的前面
		 {1,7}为1组
		 {5,4}为1组
		 {8,6}为1组
increment为2时
         {2,4,3,5,9}为一组
		 {1,6,7,8}为一组
increment为1时
		{2,1,3,6,4,7,5,8,9}为一组
		 */
	/*理解难点是:刚开始进行希尔排序的时候,因为增量是一半,每一组的元素只有两个,这个时候,
	仅仅是交换元素位置就可以(会让人误以为是交换排序)。但是随着增量的不断减少,每组的元素数量开始变多,这
	个时候,每移动一个元素,就需要对数组的部分元素进行右移(因为数组)。*/
{
	int i, j;
	int increment = sum;//设置增量
	do
	{
		increment = increment / 3 + 1;
		printf("increment:增量为%d时\n", increment);
		for (i = increment + 1; i <=sum; i++)//根据增量进行插入排序
		{
			if (arr[i] < arr[i - increment])
			{
				arr[0] = arr[i];
				for (j = i - increment ; j > 0 && arr[0] < arr[j]; j = j - increment)
					arr[j + increment] = arr[j];
				show(arr, 10);
				arr[j + increment] = arr[0];
			}
			show(arr, 10);
		}
		printf("\n\n");
		
	} while (increment > 1);
}

void main()
{
	int arr[10] = { 0,9,1,5,8,3,7,4,6,2 };
	show(arr, 10);
	
	shellSorta(arr,9);
	printf("希尔排序:");
	show(arr+1, 9);


	system("pause");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值