希尔排序 和冒泡排序

把待排序的数据分为若干组,对同一组内的数据用直接插入排序;

单链表的逆置就是用的冒泡排序。

#include <stdio.h>

void bubble_sort( int a[], int n )
{

	int i , j;       
         //标记flag,用于标记本次交换排序过程是否有交换动作。若本次没有交换动作,可以提前结束。
	int temp , flag = 1;     
	for( i =1; i < n && flag ; i++ )
	{
		flag = 0;
		for( j = 0; j < n - i; ++j )
		{
			if( a[j] > a[j + 1] )
			{
				flag = 1;
				temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;	
			}
		}
	}	

}

void shell_sort( int a[], int n, int d[], int numofd )
{
	int	m, span;
	int 	k, i ,j;
	int 	temp;

	for( m = 0; m < numofd; m++ )
	{
		span = d[m];
		for( k = 0; k< span; ++k )
		{
			for( i = k; i < n - span; i += span )
			{
				temp = a[ i + span ];
				
				j = i;
				while( j > -1 && temp < a[j] )
				{
					a[j + span] = a[j];
					j = j - span; 
				}
			a[ j + span] = temp;	
			}
		}
	}
}

void main()
{
	int	k , n;
	int 	d[] = { 6, 3,1 };
	int 	a[] = { 9,6,4,3,66,23,10 };
	n = sizeof( a ) / sizeof( int );
	//bubble_sort( a, n);
	shell_sort( a, n ,d ,3);


	for( k = 0; k< n; k++ )
		printf( "%d ", a[k] );
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值