1、希尔排序

希尔排序是插入排序的一种改进,该算法冲破O(n2)的第一批算法之一。希尔排序通过比较相距一定间隔的元素进行工作,距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。因此,希尔排序也叫缩小增量排序。希尔排序的最坏时间为N的二次方,不过使用不同的增量序列可使得最坏运行时间降低。

1.1希尔排序的基本步骤

  1. 计算增量gap=length/2;
  2. 对每一组gap进行简单的插入排序;
  3. 继续以gap = gap/2的方式缩小增量;
  4. 重复2和3,直至增量为1,最后一次进行简单的插入排序。

示例图(参考资料1):

排序算法——希尔排序

1.2代码(C实现)

#include <stdio.h>

//希尔排序,给出一个数组,进行排序
void Shellsort(int arr[], int N);
 
int main()
{
	int arr[7] = {5,2,3,8,11,9,4};
	Shellsort(arr, 7);
	int i;
	for(i = 0; i < 7; i++)
	{
	    printf(" %d ", arr[i]);
		
	}
	return 0;
}

void Shellsort(int arr[], int N)
{
	int i, j, gap;
	int tmp;
	for(gap = N/2; gap > 0; gap /= 2)
	   for(i = gap; i < N; i++)
	   {
	   	    tmp = arr[i];
	   	    for(j = i; j >= gap; j -= gap)
	   	        if(tmp < arr[j - gap])
	   	            arr[j] = arr[j - gap];
	   	        else
	   	            break;
	   	    arr[j] = tmp;
	   }
 } 

参考资料

[1] https://www.cnblogs.com/chengxiao/p/6104371.html

 

相关文章: