04_Shell排序

#include 
#include 
using namespace std;

template
void shellSort(vector &a) 
{
	int gap = a.size()/3 +1 ;  //分组步长
	while (1 <= gap) 
	{
		// 把距离为 gap 的元素编为一个组,扫描所有组
		for (int i = gap; i < a.size(); i++) 
		{
			int j = 0;
			int temp = a[i];

			// 对距离为 gap 的元素组进行插入排序
			for (j = i - gap; j >= 0 && temp < a[j]; j = j - gap) {

				a[j + gap] = a[j];   //符合条件的元素后移动

			}
			a[j + gap] = temp;
		}
		//System.out.format("gap = %d:\t", gap);
		//printAll(list);
		gap = gap/2; // 减小增量
	}
}

你可能感兴趣的:(排序算法)