Python|插入排序之希尔排序

引言

希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。

问题描述

希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。

那具体是如何实现排序的呢?

算法描述

下面小编将用一个实例来描述

第一次排序:

设gap1=N/2=5,即相隔距离为5的元素组成一组,可以分为5组。接下来,按照直接插入排序的方法对每个组进行排序。

第二次排序:

将上次的gap缩小一半,即gap2=gap1/2=2(取整数)。这样每相隔距离为2的元素组成一组,可以分为2组。按照直接插入排序的方法对每个组进行排序。

第三次排序:s

再次把gap缩小一半,即gap3=gap2/2=1。这样相隔距离为1的元素组成一组,即只有一组。按照直接插入排序的方法对每个组进行排序。此时,排序已经结束。

结语

通过实例对希尔排序的运用,详细的了解了希尔排序中主要是分成若干子序列,再分别进行直接插入排序。排序在学习算法的过程中是必不可少的,之后会继续学习交换排序。

主编:欧洋

稿件来源:深度学习与文旅应用实验室(DLETA)

(0)

相关推荐

  • C 实现主流的几个排序算法

    排序算法是笔试中常考的题目,很多面试者背了整个算法代码,过一段时间就又忘记了. 面试者在面试过程中往往处于一种比较紧张的状态, 若对代码不是很熟悉的话, 基本很难完整编写排序算法代码. 小编最近也在看 ...

  • 常见的排序算法总结

    排序的概念 1.排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 2.稳定性:假定在待排序的记录序列中,存在多个具有相同关键字的记录,若经过排序,这些记录 ...

  • 冒泡排序、插入排序、选择排序、希尔排序

    排序是一个非常经典的问题,它以一定的顺序对一个数组(或一个列表)中的项进行重新排序(可以进行比较,例如整数,浮点数,字符串等)(增加,非递减,递减, 增加,词典等). 有许多不同的排序算法,每个都有其 ...

  • Python | 深入希尔排序世界

    引言 希尔排序(Shell Sort),是插入排序的一种又称"缩小增量排序",同时它是非稳定排序算法.该方法因 D.L.Shell 于 1959 年提出而得名. 问题描述 希尔排序 ...

  • Java排序算法(四)希尔排序2

    希尔排序移步法:分组+直接插入排序组合 一.测试类SortTest import java.util.Arrays; public class SortTest { private static fi ...

  • python笔记2-冒泡排序

    前言 面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一批英雄好汉,本篇就详细讲解如何用python进行冒泡排序. 一.基本原理 1.概念: 冒泡排序(Bubble Sort),是一种 ...

  • PHP数据结构-插入类排序:简单插入、希尔排序

    插入类排序:简单插入.希尔排序 总算进入我们的排序相关算法的学习了.相信不管是系统学习过的还是没有系统学习过算法的朋友都会听说过许多非常出名的排序算法,当然,我们今天入门的内容并不是直接先从最常见的那 ...

  • 希尔排序

    希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提出而得名. 希尔排序是把记 ...

  • Python|调换位置来排序

    引言 在生活休息时,有人喜欢打麻将.如果你也会打麻将,你一定会发现:在刚拿到牌的时候,牌的顺序一定是无序的,然后你就会按花色给牌进行排序.在进行排序时,如果你是习惯从小到大的顺序,你一定会将其中两张牌 ...

  • Algorithm:C++语言实现之内排序、外排序相关算法(插入排序 、锦标赛排序、归并排序)

    Algorithm:C++语言实现之内排序.外排序相关算法(插入排序 .锦标赛排序.归并排序) 一.内排序 1.插入排序 2.锦标赛排序 3.归并排序 4.堆排序是利用堆的性质进行的一种选择排序 5. ...

  • 图解排序算法(二)之希尔排序

    希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一 ...