希尔排序(Shell Sort)
2018-01-05 21:18
435 查看
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。
希尔排序实现:将数组列在一个表中并对列排序(用插入排序)。重复这过程,不过每次用更长的列来进行。最后整个表就只有一列了。将数组转换至表是为了更好地理解这算法,算法本身仅仅对原数组进行排序(通过增加索引的步长,例如是用
例如,假设有这样一组数[ 13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10 ],如果我们以步长为5开始进行排序,我们可以通过将这列表放在有5列的表中来更好地描述算法,这样他们就应该看起来是这样:
然后我们对每列进行排序:
将上述四行数字,依序接在一起时我们得到:[ 10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45 ].这时10已经移至正确位置了,然后再以3为步长进行排序:
排序之后变为:
最后以1步长进行排序(此时就是简单的插入排序了)
希尔排序实现:将数组列在一个表中并对列排序(用插入排序)。重复这过程,不过每次用更长的列来进行。最后整个表就只有一列了。将数组转换至表是为了更好地理解这算法,算法本身仅仅对原数组进行排序(通过增加索引的步长,例如是用
i += step_size而不是
i++)。
例如,假设有这样一组数[ 13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10 ],如果我们以步长为5开始进行排序,我们可以通过将这列表放在有5列的表中来更好地描述算法,这样他们就应该看起来是这样:
13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10
然后我们对每列进行排序:
10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45
将上述四行数字,依序接在一起时我们得到:[ 10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45 ].这时10已经移至正确位置了,然后再以3为步长进行排序:
10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45
排序之后变为:
10 14 13 25 23 33 27 25 59 39 65 73 45 94 82 94
最后以1步长进行排序(此时就是简单的插入排序了)
C语言实现:
void shell_sort(int a[], int n) { int i, j, temp, gap; for (gap = n / 2; gap > 0; gap /= 2) { for (i = gap; i < n; i++) { temp = a[i]; for (j = i ; j > 0 && a[j-gap] > temp; j -= gap) { a[j] = a[j-gap]; } a[j] = temp; } } } int main() { int a[] = { 4,8,1,2,0,2,5,6,9,7 }; shell_sort(a, 10); return 0; }
相关文章推荐
- 希尔排序(shell sort)
- 希尔排序(Shell Sort)
- 03_希尔排序(ShellSort)
- C++、C#、java算法学习日记05----希尔排序(ShellSort)
- 算法:希尔排序(Shell Sort)
- uva 10152 ShellSort 龟壳排序(希尔排序?)
- PHP排序算法之希尔排序(Shell Sort)实例分析
- 数据结构 - 希尔排序(Shell's Sort) 详解 及 代码(C++)
- uva 10152 ShellSort 龟壳排序(希尔排序?)
- [排序] 希尔排序(Shell Sort)
- 希尔排序(ShellSort)
- 希尔排序(Shell Sort)
- 希尔排序(ShellSort)
- 希尔排序(shellsort)算法实现
- [算法] 希尔排序 Shell Sort
- 排序——希尔排序(Shell Sort)
- 希尔排序(Shellsort)
- 希尔排序(shell sort)
- 算法----希尔排序(shell sort)
- 希尔排序(shellsort)算法实现