现在的位置: 首页 > 综合 > 正文

希尔排序

2019年04月24日 ⁄ 综合 ⁄ 共 502字 ⁄ 字号 评论关闭
#include <stdio.h>

void ShellSort( int *a, int n )
{
    int i, j;
    int temp;
	int increment;
	increment = n;
	do
	{
		increment = increment/3+1;
		for( i=increment; i<n; i+=increment ) {  //取出第i个记录的关键字
			temp = a[i];
			for( j=i-increment; j>=0; j-=increment ) {
				if( temp < a[j] ) {
					if( 0 == j ) {  //取出的关键字比当前有序区的第一个关键字还要小的情况,做特殊处理(也可以利用哨兵来处理)
						a[j+increment] = a[j];
						a[j] = temp;
					 }
					else  
						a[j+increment] = a[j];
				}
				else {
					a[j+increment] = temp;
					break;
				}
			}
		}
	}while( increment > 1 );
}
int main()
{
    int i;
    int a[10] = {7,4,1,8,5,2,9,6,3,0};
    ShellSort( a, 10 );
    for( i=0; i<10; i++ )
        printf("%d ", a[i]);
    printf("\n");
    return 0;
}

【上篇】
【下篇】

抱歉!评论已关闭.