时间: 2020-09-18|52次围观|0 条评论

希尔排序

希尔排序与堆排序(Java版)插图
希尔排序与堆排序(Java版)插图1

package ShellSort;

import Utils.SortUtils;

public class Demo {

    public static void shellSort(int[] a){

        int temp,j;
        int increment = a.length;

        do{
            increment = increment/3+1;//如果是直接插入排序,这里的increment都为1。
            //System.out.println(increment);
            for (int i = increment; i < a.length; i++) {
                if(a[i]<a[i-increment]){
                    temp = a[i];//暂存于temp中

                    for (j=i-increment; j>=0 && a[j]>temp; j-=increment) {
                        a[j+increment] = a[j];//记录后移,查找插入位置
                    }
                    a[j+increment] = temp;//插入
                }
            }
        }while(increment>1);    
    }

    public static void main(String[] args) {
        int[] a = {2,3,5,4,1,6,9,8,7};
        shellSort(a);
        SortUtils.printString(a);
    }
}

复杂度分析

希尔排序与堆排序(Java版)插图2
希尔排序与堆排序(Java版)插图3

堆排序

希尔排序与堆排序(Java版)插图4

希尔排序与堆排序(Java版)插图5

希尔排序与堆排序(Java版)插图6

希尔排序与堆排序(Java版)插图7

希尔排序与堆排序(Java版)插图8

希尔排序与堆排序(Java版)插图9

package HeapSort;

import Utils.SortUtils;

public class Demo02 {

    //堆排序
    public static void heapSort(int[] a){
        int len = a.length;
        //将待排序数据构建为大顶堆
        for(int i=(a.length-1-1)/2;i>=0;i--){
            heapAdjust(a,i,len);
        }

        for (int i = a.length-1; i > 0; i--){
            //将队顶值与当前未经排序子序列的最后一个值交换
            SortUtils.swap(a,0,i);
            heapAdjust(a,0,--len);//重新调整大顶堆
        }

    }

    //将待排序序列构建成一个大顶堆
    public static void heapAdjust(int[] a,int s,int len){

        int temp;
        temp = a[s];
        for (int i = 2*s+1; i < len; i++) {
            if(i<len-1 && a[i]<a[i+1]){
                i++;//i为关键字中较大的记录的下标
            }

            if(temp>=a[i]){//如果父节点本身就大于最大的子节点,终止循环
                break;
            }
            a[s] = a[i];
            s = i;
        }
        a[s] = temp;
    }

    public static void main(String[] args) {
        int[] a = {2,3,5,4,1,6,9,8,7};
        heapSort(a);
        SortUtils.printString(a);
    }
}

复杂度分析

希尔排序与堆排序(Java版)插图10
希尔排序与堆排序(Java版)插图11

原文链接:https://blog.csdn.net/scgaliguodong123_/article/details/47071429

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《希尔排序与堆排序(Java版)
   

还没有人抢沙发呢~