shellsort
博客专区 > Nibnat 的博客 > 博客详情
shellsort
Nibnat 发表于4年前
shellsort
  • 发表于 4年前
  • 阅读 5
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

基本思想和解释:

该函数包含了一个三重嵌套的for 循环语句,最外层的for语句控制两个比较元素之间的距离,从n/2开始直到距离为0结束。中间层的for循环语句用于在元素间移动位置,最内层的for语句用于比较各对相距gap个位置的元素。

#include<stdio.h>
#include<malloc.h>

void shellsort( int v[],int n )
{
	int gap , i , j , tmp;
	for( gap = n / 2 ; gap > 0 ; gap /= 2 )
	{
		for( i = gap ; i < n ; i++ )
		{
			for( j = i - gap ; j >= 0 && v[ j ] > v[ j + gap ] ; j -= gap )
			{
				tmp = v[ j ];
				v[ j ] = v[ j + gap ];
				v[ j + gap ] = tmp;
			}
		}
	}
}

int main(int argc,int *argv[])
{
	//int v[] = { 45,12,21,24,56,1,2,5,69,85,75 };
	//int n = sizeof( v )/sizeof( v[ 0 ] );
	int i = 0;
	int n = argc - 1;
	int * v;
	
	v = (int *)malloc( sizeof( int ) * n );
	
	for( i = 0 ; i < n ; i++ )
	{
		v[ i ] = atoi( (const char *)argv[ i + 1 ] );
	}
	
	shellsort( v , n );
	for( i = 0 ; i < n ; i++ )
		printf("%d ",v[ i ]);
		
	printf("\n");
	free( v );
	return 0;
}


共有 人打赏支持
粉丝 0
博文 27
码字总数 10770
×
Nibnat
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: