目 标 用C#实现希尔排序
思 想
希尔排序(Shell Sort)又称为“缩小增量排序”。是1959年由D.L.Shell提出来的。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。
具体做法:首先确定一组增量d0,d1,d2,d3,...,dt-1()其中n>d0>d1>...>dt-1=1),对于i =0,1,2,...,t-1,依次进行下面的各趟处理:根据当前增量di将n个元素分成di个组,每组中元素的下标相隔为di;再对各组中元素进行直接插入排序
实现
public void Sort(int[] intArray)
{
int k;
int j;
int intTemp;
//计算步长
for ( k = 1; k <= intArray.Length/3; k = k * 3 + 1) ;
//循环比较
while (k > 0)
{
//插入排序
for (int i = k + 1; i <= intArray.Length; i = i + k)
{
intTemp = intArray[i - 1];
j = i;
while (j > k && intArray[j - k - 1] > intTemp)
{
intArray[j - 1] = intArray[j - k - 1];
j = j - k;
}
intArray[j - 1] = intTemp;
}
//减少步长
k = (k - 1) / 3;
}
}
代码下载 希尔排序代码