03_希尔排序(ShellSort)
2017-05-17 19:45
489 查看
希尔排序算法思路:
希尔排序是插入排序的增强版,如果没看过插入排序,请先查看插入排序算法的思路。
希尔排序按照增量d依次将数组分组排序,增量的选取可以自己决定,现在还没统一的规定多少是最合适的,但是增量的最后必须是d=1。
例如:有个a[10]的数组,增量可以选取d=len , d=d/3+1 (4,2,1);每个增量d都可以将数组分成d组。然后,每个组再进行排序,这样经过一轮增量d分组排序后,d个组都排好序。按照这样进行,直至d=1。
希尔排序是插入排序的增强版,如果没看过插入排序,请先查看插入排序算法的思路。
希尔排序按照增量d依次将数组分组排序,增量的选取可以自己决定,现在还没统一的规定多少是最合适的,但是增量的最后必须是d=1。
例如:有个a[10]的数组,增量可以选取d=len , d=d/3+1 (4,2,1);每个增量d都可以将数组分成d组。然后,每个组再进行排序,这样经过一轮增量d分组排序后,d个组都排好序。按照这样进行,直至d=1。
void wei::Chen::showArr(int arr[], int len) { for (int i = 0; i < len; ++i ) { cout << arr[i] << " "; } cout << endl; } void wei::Chen::shellSort(int arr[], int len) { int gap = len ; int k; int temp; do { gap = gap/ 3 + 1; cout << gap << endl; /*分gap组*/ for (int k = 0; k < gap; ++k ) { /*每组进行单独排序*/ for (int i = k+gap; i < len; i += gap) { k = i; temp = arr[k]; for (int j = i - gap; (j >= 0) && (temp<arr[j]); j -= gap) { arr[j + gap] = arr[j]; k = j; } arr[k] = temp; } } cout << gap << endl; }while( gap>1 ) ; }
相关文章推荐
- 希尔排序(shell sort):c++
- 希尔排序(Shell Sort)
- 八大排序算法之二希尔排序(Shell Sort)
- shell sort 希尔排序问题
- Shell Sort(希尔排序)
- 算法----希尔排序(shell sort)
- 用java 和 python将希尔排序Shell's Sort 的每一步打印出来(每次的增量没有固定规则)
- 排序_Shell_Sort(希尔排序)
- 算法:希尔排序(Shell Sort)
- Shell Sort 希尔排序
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 排序--希尔排序的实现(shellsort)
- 【DS】排序算法之希尔排序(Shell Sort)
- 排序算法---希尔排序(Shell Sort)
- 数据算法之希尔排序(shellSort)的Java实现
- 【每日一题(25)】初等排序算法(2) 希尔排序(shell sort)
- 常用排序算法—Shell Sort(希尔排序)
- ShellSort(希尔排序)
- 【排序算法 】希尔排序 shell sort(插入类排序)