插入排序算法-----希尔排序

插入排序算法-----希尔排序

希尔排序思想是将数组每次分成不同的数组同时进行排序,划分的方式是设置增量值,即h= length/2, h /=2;与直接排序最大的不同就是比较的数组值下标间隔不同。希尔排序在数据量庞大的时候进行排序效率高,时间短。

观察下图,根据以上思想,进行移动。
在这里插入图片描述

代码如下:

#include <stdio.h>
void shellsort(int *a, int length)
{
	int i,j,temp,h;//h表示增量 h = length/2
    for(h = length/2; h>0; h/=2)//计算每次排序的数组下标增量值 
    {
		for(i=h; i<length; i += h) //i从h开始 
		{ 
			temp = a[i]; 
			for(j = i-h; j>=0; j-=h) //与直接排序不同的是下标间隔为增量值h ,取i的值,将其与前面所有的数进行比较 
			{
				if(temp < a[j]) 
				{
					a[j+h] = a[j];
				}
				else{
					break; 
				}
			}
			
			a[j+h] = temp; //数组下标间隔每加一个增量值h 
		}
    }
}
int main()
{
	int arry[]={8,2,6,7,0,1,3,12,30,25,90,88,11,13};
	
	int length = sizeof(arry)/sizeof(int);
    printf("排序前: ");
	for(int i=0; i<length; i++)
	{
	     printf("%d  ", arry[i]);	
	}
	
	shellsort(arry, length);
	 printf("\n排序后: ");
	for(int i=0; i<length; i++)
	{
	     printf("%d  ", arry[i]);	
	}
	return 0;
}
 

程序运行如下:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值