shell排序是对插入排序的一个改装,它每次排序把序列的元素按照某个增量分成几个子序列,对这几个子序列进行插入排序,然后不断的缩小增量扩大每个子序列的元素数量,直到增量为一的时候子序列就和原先的待排列序列一样了,此时只需要做少量的比较和移动就可以完成对序列的排序了.
/**/
/* shell sort algorithm */
/**/ /* 开始增量为数组长度的一半,然后一次减少一半,直到为1 */
template < class T >
void ShellSort(T * input, int len)
... {
int temp;
for (int incre = len / 2; incre > 0; incre = incre / 2)
...{
for (int j = incre; j < len; j++)
...{
temp = input[j];
for (int i = j; i >= incre; i -= incre)
...{
if (input[i - incre] > temp)
...{
input[i] = input[i - incre];
}
/**//* 前面的已经排好序 */
else
...{
break;
}
}
input[i] = temp;
}
}
}
/**/ /* 开始增量为数组长度的一半,然后一次减少一半,直到为1 */
template < class T >
void ShellSort(T * input, int len)
... {
int temp;
for (int incre = len / 2; incre > 0; incre = incre / 2)
...{
for (int j = incre; j < len; j++)
...{
temp = input[j];
for (int i = j; i >= incre; i -= incre)
...{
if (input[i - incre] > temp)
...{
input[i] = input[i - incre];
}
/**//* 前面的已经排好序 */
else
...{
break;
}
}
input[i] = temp;
}
}
}