跳转到内容
主菜单
主菜单
移至侧栏
隐藏
规范/协议
协议
算法
JVM
多线程/并发
存储
AI
深度学习
工具箱
最近更改
文章分类
全部文章
WHY42
搜索
搜索
外观
登录
个人工具
登录
欢迎来到Riguz的小站!这是一个私人wiki,用来记录一些我的笔记。
查看“︁Shell Sort”︁的源代码
页面
讨论
大陆简体
阅读
查看源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
查看源代码
查看历史
常规
链入页面
相关更改
页面信息
外观
移至侧栏
隐藏
←
Shell Sort
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
希尔排序,也称递减增量排序算法,是[[插入排序]]的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: *[[插入排序]]在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率 *但[[插入排序]]一般来说是低效的,因为插入排序每次只能将数据移动一位 =算法描述== #选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1; #按增量序列个数k,对序列进行k 趟排序; #每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。 =示例代码= ==C== <source lang="c"> void shell_sort(int arr[], int len) { int gap, i, j; int temp; for (gap = len >> 1; gap > 0; gap >>= 1) for (i = gap; i < len; i++) { temp = arr[i]; for (j = i - gap; j >= 0 && arr[j] > temp; j -= gap) arr[j + gap] = arr[j]; arr[j + gap] = temp; } } </source> ==C++== <source lang="cpp"> template<typename T> //整数或者浮点数都可以可使用,若要使用类(class)时必须设置大于(>)的比较功能 void shell_sort(T arr[], int len) { int gap, i, j; T temp; for (gap = len >> 1; gap > 0; gap >>= 1) for (i = gap; i < len; i++) { temp = arr[i]; for (j = i - gap; j >= 0 && arr[j] > temp; j -= gap) arr[j + gap] = arr[j]; arr[j + gap] = temp; } } </source> ==Java== <source lang="java"> static <E extends Comparable<? super E>> void shellSort(List<E> a) { int h = 1; while (h < a.size()/3) { h = h*3 + 1; // <O(n^(3/2)) by Knuth,1973>: 1, 4, 13, 40, 121, ... } for (; h >= 1; h /= 3) { for (k = 0; k < h; k++) { for (int i = h + k; i < a.size(); i+=h) { for (int j = i; j >= h && a.get(j).compareTo(a.get(j-h)) < 0; j-=h) { Collections.swap(a, j, j-h); } } } } } </source> [[Category:Algorithm]]
返回
Shell Sort
。
搜索
搜索
查看“︁Shell Sort”︁的源代码
添加话题