什么? 搞Java不会算法?
由于个人兴趣原因以及工作所需,最近了解Java算法的相关案例
及时分享 感兴趣的欢迎交流
希尔排序
描述:
基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列
中的记录“基本有序”时,再对全体记录进行依次直接插入排序。
1. 操作方法:
选择一个增量序列 t1,t2,…,tk,其中 ti>tj,tk=1;
2. 按增量序列个数 k,对序列进行 k 趟排序;
3. 每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进
行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长
度。
展示
如果还是不明白 请看图
动图展示
代码浏览
代码自测
/**
* 希尔排序
* [@param](https://my.oschina.net/u/2303379) arr 待排序的数组
*/
private void ShellInsertSort(int[] arr) {
int gap = arr.length;
while (true) {
//增量每次减半
gap /= 2;
for (int i = 0; i < gap; i++) {
//这里循环就是一个插入排序
for (int j = i + gap; j < arr.length; j += gap) {
//待插入元素
int temp = arr[j];
int k = j - gap;
while (k >= 0 && arr[k] > temp) {
arr[k + gap] = arr[k];
k -= gap;
}
arr[k + gap] = temp;
}
}
if (gap == 1) {
break;
}
}
System.out.println(Arrays.toString(arr));
}
初期可以拿去自己练习 熟悉之后可以灵活运用
希望同仁志士,前来参考以及指点!共同进步,发扬文化精神!转载请标明出处!