排序算法--Shell排序

#include <stdlib.h>

template <typename T>
static void ShellSubSort(T iData[], size_t iBegin, size_t iEnd, size_t n)
{
	if (iEnd < iBegin + n)
		return;

	size_t iCurPos = iBegin+n;
	T iCurValue;
	size_t p = 0;

	while (iCurPos <= iEnd)
	{
		iCurValue = iData[iCurPos];
		p = iCurPos-n;
		while (p >= iBegin && iData[p] > iCurValue)
		{
			iData[p+n] = iData[p];
			p -= n;
		}
		iData[p+n] = iCurValue;
		iCurPos += n;
	}

	return;
}


template <typename T>
void ShellSort(T iData[], size_t iBegin, size_t iEnd)
{
	//當iSteps[1] = {1}時,就退化爲插入排序
	int iSteps[3] = {5,3,1};
	for (size_t i = 0; i < sizeof(iSteps)/sizeof(int); i++)
		ShellSubSort(iData, iBegin, iEnd, iSteps[i]);

	return;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章