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希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

希尔排序及希尔排序java代码

排序算法之希尔排序(Java)

排序算法之希尔排序(Java)

java方式实现希尔排序

Java 希尔排序算法

希尔排序-Java实现