希尔排序

希尔排序是插入排序的一种,是直接插入排序算法的一种更高效的改进版本。先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2

package problem;

import java.util.Arrays;

/*
 * 希尔排序:采用分组的策略,组内进行排序
 * 时间复杂度O(n^1.3~1.5),不稳定
 * 尽量让数据变得有序
 * 越有序越快 
 * */
public class Shellsort {
    public static void shell(int[] array,int gap){//排序
        int tmp = 0;
        int j;
        for(int i = gap;i<array.length;i++){
            tmp = array[i];
            for(j=i-gap;j>=0;j-=gap){
                if(array[j] > tmp){
                    array[j+gap] = array[j];
                }else{
                    break;
                }
            }
            array[j+gap] = tmp;
        }

    }
    public static void shellsort(int[] array){
        int[] d = {5,3,1};//分组个数,最后一个必须为1,并且所有为素数,
        for(int i = 0;i<d.length;i++){
            shell(array,d[i]);
        }
    }


    public static void main(String[] args) {
        int[] array ={12,42,1,13,2,65,77,18,17,32};
        shellsort(array);
        System.out.println(Arrays.toString(array));

    }

}

运行结果:
这里写图片描述

第一次排序:
这里写图片描述
第二次排序:
这里写图片描述
第三次排序:
这里写图片描述

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页