shellsort

基本思想和解释:

该函数包含了一个三重嵌套的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;
}


你可能感兴趣的:(shellsort)