Shell_sort(希尔排序)
一、算法思路:先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止。
二、时间复杂度:比快速排序快 小于O(n²)
三、稳定性:不稳定
四、代码段
int Shell_Sort(int s[], int n)
{
int i, j, gap,temp;
gap = n / 2; //确定固定增值
while (gap >= 1)
{
for (i = gap + 1; i <= n; i++) //数组下标从gap+1开始进行直接插入排序
{
temp = s[i]; //设置监哨
j = i - gap;//
while ((j > 0) && (temp < s[j]))
{
s[j + gap] = s[j]; //数据右移
j = j - gap; //向左移gap个位置
}
s[j + gap] = temp;
}
gap = gap / 2;
}
return 0;
}