数据结构与算法:从插入排序到希尔排序
学完插入排序和希尔排序之后,我才恍然大悟,希尔排序就是插入排序的进阶版
所以如果想写一个希尔排序,可以先写一个插入排序,然后加上一个增量increment
具体做法为将插入排序的递增或者递减1换成增量increment
如下是一个插入排序
/*********** 插入排序 ***********/
int InsertSort(double *arr, int arrLenth)
{
int i, j;
for (i = 0 ; i < arrLenth -1 ; i++)
{
if (arr[i] > arr[i+1])
{
int temp = arr[i+1];
for (j = i; j >= 0 && arr[j] > temp; j--)
{
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
}
return 0;
}
完成了插入排序之后,在插入排序的基础上将插入排序的递增或者递减1换成增量increment
如下是一个在插入排序基础上变换来的希尔排序
/*********** 希尔排序 ***********/
int ShellSort(double *arr, int arrLenth)
{
int i, j;
int increment = arrLenth;
for (increment = increment / 3; increment >= 1; increment = increment / 3)
{
for (i = 0; i < arrLenth - increment; i++)
{
if (arr[i] > arr[i + increment])
{
int temp = arr[i + increment];
for (j = i; j >= 0 && arr[j] > temp; j -= increment)
{
arr[j + increment] = arr[j];
}
arr[j + increment] = temp;
}
}
}
return 0;
}
如上!