排序算法(C实现)------- 希尔排序

        希尔排序的思想是按照一个递减的方法进行排序,其本质是分组插入排序,举例:如有9个待排序数,取初始步长为5,按照5,3,1 的递减顺序进行排序,每一轮即将位置1和位置6,位置2和位置7,位置3和位置8,位置4和位置9进行排序;第二轮步长为3,则将位置1,4,7,位置2,5,8,位置3,6,9分别进行排序;第三轮则步长为1,则和一般的排序一样,不过经过前两轮,数据已局部有序,故可以采用交换次数少的冒泡排序,当然了其他的排序也可以。

        代码如下:

//step为初始步长,取奇数
void shell_sort(ElemType array[],int length,int step){
	int inner,outer,median;
	int i,j;
	if(array == NULL || length == 0)
		exit(0);
	//步长每次减2,直到变为1
	for(; step >= 1; step-=2){
		for(i = 0; i < step; i++){
			
			//取出最后一个元素下标
			outer = i;
			while((outer + step) <= (length -1)){
				outer += step;
			}
			//对相应位的元素进行排序,采用冒泡排序 
			
			for(; outer >= (i + step);outer -= step){
				for(inner = i; inner < outer; inner += step){
					if(array[inner] > array[inner+step]){
						median = array[inner];
						array[inner] = array[inner+step];
						array[inner+step] = median;
					}
				}
			}
			
		}

	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值