以前写过一个希尔排序,不过不是很好理解,并且代码也很长,这次从C程序设计语言中看到一个比较好理解并且代码量较少的程序,值得学习一下
//希尔排序
//v[]待排数组,n数组个数
void shell_sort(int v[],int n)
{
int gap,j,i,temp;
//从n/2开始进行对折
for(gap = n / 2;gap > 0 ; gap /= 2)
{
//从gap出开始往后循环,移动位置
for(i = gap;i < n; i ++)
{
//开始和后面的以步长gap向后比较
for(j = i - gap;j >= 0 &&v[j] > v[j + gap]; j -= gap)
{
//交换元素位置
temp = v[j];
v[j] = v[j + gap];
v[j + gap] = temp;
}
}
}
}