希尔排序

思想(见图):


等同于插入排序,不同的是,插入排序每次只间隔一个元素,而希尔排序间隔 gap个元素,最后一趟又是一边真正的插入排序(间隔一个):

代码:

#pragma once


void ShellSort(int *a, int size)
{
	assert(a);
	int gap = size;
	while (gap > 1)
	{
		gap = gap / 3 + 1;

		//一下都是插入排序的过程
        int index = gap;
		int i = gap;
		while (index < size)
		{
			int tmp = a[index];
			int end = index - gap;
			while (end >= 0 && tmp < a[end])
			{
				a[end + gap] = a[end];
				end -= gap;
			}
			a[end + gap] = tmp;
			index += gap;
		}
	}
}



原文地址:https://www.cnblogs.com/melons/p/5791866.html