常用排序之Shell

Shell排序严格来说是基于插入排序而来的,我们来看一下Shell排序的执行流程:

    (1)将有n个元素的数组分成n/2个子序列,第1个数据和第n/2+1个数据为一对

    (2)一次循环执行完成之后使得每一个序列对排好序,也就是说在原来的数组中比较大小交换位置

    (3)然后再变为n/4个子序列,再次排序。不断的重复这个过程,直到排序完成

图解执行过程:

 200500_YQaF_2348477.png

package com.shi.sort;

import java.util.Arrays;

/**
 * Created by shifeifei on 2016/5/15.
 * 希尔排序:其时间复杂度受序列的影响交大,最坏的情况是o(n2),好的情况在o(n1.3),所以说它是一种不稳定的排序算法
 */
public class ShellSort {

    public static void main(String[] args) {

        int[] a = {127, 118, 105, 101, 112, 100};

        for (int r = a.length; r >= 1; r = r / 2) {//分解数组为多个序列

            for (int i = r; i < a.length; i++) {//比较划分好的每一对数据,并交换位置
                int t = a[i];
                int j = i - r;
                while (j >= 0 && t < a[j]) {
                    a[j + r] = a[j];
                    j = j - r;
                }
                a[j + r] = t;
            }
        }
        System.out.println(Arrays.toString(a));

    }
}

 

转载于:https://my.oschina.net/sxshifeifei/blog/701081

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值