【八大排序】day2.希尔排序

一、希尔排序

/**
 * 希尔排序:
 * 某些情况下,直接插入排序的效率很低。比如有一个升序数组,
 * 然后我们插入一个比这个数组最小值还小的数,
 * 这也就意味着需要和每个数都进行一次比较。插入排序对已经排好序的数组来说效率很高。
 * 所以我们可以先构建一个相对有序的数组,然后再做插入排序。
 * 希尔排序把序列按一定步长分组,对每组分别进行插入排序。随着步长减少,直到1,算法结束。
 * 希尔排序又叫缩小增量排序。
 * 一般来说,初次取数组长度的一半作为步长,以后每次减半,直到为1。
 */
public static void shellSort(Integer[] arr) {
        //gap为步长,每次减少到原来的一半,直到减为1
        for (int gap = arr.length / 2; gap > 0; gap /= 2) {
            //对每一组数据都进行直接插入排序,一共有gap组
            for (int i = 0; i < gap; i++) {
                //对本组数据进行直接插入排序
                for (int j = i + gap; j < arr.length; j += gap) {
                    //如果arr[j]<arr[j-gap],则寻找arr[j]的位置,将这个位置的数据后移
                    if (arr[j] < arr[j - gap]) {
                        int k;
                        int temp = arr[j];
                        for (k = j - gap; k >= 0 && arr[k] > temp; k -= gap) {
                            arr[k + gap] = arr[k];
                        }
                        //把最后一个不满足条件的后一个位置赋给temp
                        arr[k + gap] = temp;
                    }
                }
            }
        }
    }

注意事项:

1.步长gap一般从数组的一半开始取,每次减半,直到为1

2.gap为多少,那么就会有多少个分组

3.对每个分组进行直接插入排序 

二、全部代码

public class _4_ShellSort {
    public static void main(String[] args) {
        Integer[] arr = {3, 5, 1, 7, 2, 3, 4, 8};
        shellSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void shellSort(Integer[] arr) {
        //gap为步长,每次减少到原来的一半,直到减为1
        for (int gap = arr.length / 2; gap > 0; gap /= 2) {
            //对每一组数据都进行直接插入排序,一共有gap组
            for (int i = 0; i < gap; i++) {
                //对本组数据进行直接插入排序
                for (int j = i + gap; j < arr.length; j += gap) {
                    //如果arr[j]<arr[j-gap],则寻找arr[j]的位置,将这个位置的数据后移
                    if (arr[j] < arr[j - gap]) {
                        int k;
                        int temp = arr[j];
                        for (k = j - gap; k >= 0 && arr[k] > temp; k -= gap) {
                            arr[k + gap] = arr[k];
                        }
                        //把最后一个不满足条件的后一个位置赋给temp
                        arr[k + gap] = temp;
                    }
                }
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《淘淘商城-day08.docx》是一份关于淘淘商城第八天工作的文档。在这一天,淘淘商城的团队采取了一系列措施来进一步提升用户体验和销售业绩。 首先,团队进行了网站内容的优化。他们对商品详情页进行了修复和更新,确保信息的准确性和完整性。同时,他们也对页面的布局进行了调整,使得用户更容易浏览和购买商品。这些改进措施能够提升用户的满意度和购买转化率。 其次,团队还加强了与供应商的合作关系。他们与一些热门品牌建立起了合作伙伴关系,以获得独家销售权或更优惠的价格。这不仅能够吸引更多的用户,还能提高淘淘商城的竞争力。 另外,团队还对物流配送进行了优化。他们与一家可靠的物流公司合作,以确保商品能够及时、安全地送达给用户。他们还推出了更快速、更便捷的配送选项,如次日达和晚间配送,以满足用户的各种需求。 为了增加用户的复购率,团队还积极进行了促销活动。他们推出了限时限量的特价商品,以及购买一定金额就能获得赠品或折扣的优惠活动。这些促销措施能够吸引用户重复购买,并提升销售额。 总之,《淘淘商城-day08.docx》记录了淘淘商城团队在第八天所做的一系列工作。通过网站内容优化、供应商合作、物流配送优化和促销活动,团队致力于提升用户体验和销售业绩,从而使淘淘商城更加竞争和成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值