Java希尔排序
Posted 木木林Violet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java希尔排序相关的知识,希望对你有一定的参考价值。
目录
希尔排序(Shellsort)又称缩小增量法。它的思想和插入排序的思想有一定的关联。插入排序是将整个数组看成一个整体,而希尔排序是将整个数组划分为几大块,先每块分别进行插入排序,再将几个大块拆分为更多的小块,并继续上述的操作,直到拆分到每块都只有一个元素,此时整个数组则排序完成。
排序流程图
排序思想
1.先将整个数组对半拆分,得到两部分数组。
2.对那两部分数组进行插入排序。
3.再将每块进行对半拆分,得到几部分的数组。
4.再次对那几部分的数组进行插入排序。
5.直到每部分都只有一个元素,此时已无法再拆分,则整个数组都排序完成。
排序代码
public static void shellSort(int[] arr)
//首次拆分
int gap = arr.length >> 1;
while (gap > 1)
//进行插入排序
insertSortByGap(arr, gap);
//对每部分进行拆分
gap >>= 1;
//此时整个数组已经近乎有序,再次使用插入排序即可有序
insertSort(arr);
//此函数为将插入排序中的起始索引1,改为gap
private static void insertSortByGap(int[] arr, int gap)
for (int i = gap; i < arr.length; i++)
//对每部分的数组进行插入排序
for (int j = i; j >= gap && arr[j] > arr[j - gap]; j -= gap)
swap(arr, j, j - gap);
以上是关于Java希尔排序的主要内容,如果未能解决你的问题,请参考以下文章