希尔排序
希尔排序
希尔排序是基于插入排序思想上的,也是基于插入排序代码实现的。
希尔排序的流程:
其实当元素个数为奇数和偶数时,没太大区别,只是分段的多一个少一个罢了。
当需排序元素为奇数时:
当需排序元素为偶数时:
代码示例:
代码实现就是在插入排序的代码上进行操作,加入了一个jump,然后将代码中的1全部替换为jump。
void shell_sort(int parr[], int len) //希尔排序
{
int j;
int tempval;
int jump = len >> 1; //jump为数组长度一半的大小
while (jump != 0) //循环插入
{
for (int i = jump; i < len; ++i)
{
tempval = parr[i];
j = i - jump;
while (j >= 0 && tempval < parr[j])
{
parr[j + jump] = parr[j];
j = j - jump;
}
parr[j + jump] = tempval;
}
jump >>= 1; //jump除等于2
}
}