def shell_sort(alist): n=len(alist) gap= int(n / 2) #步长 while gap>0: for i in range(gap,n): j=i while j>=gap and alist[j-gap] > alist[j]: alist[j-gap],alist[j]=alist[j],alist[j-gap] #交换值 j-=gap gap=int(gap/2) #新的步长 alist=[11,33,44,55,66,9,72,86,9…
1.原理介绍 希尔排序又称为缩小增量排序,由D.L.Shell在1959年提出而得名. 该算法先取一个小于数据表中元素个数 n 的整数gap, 并以此作为第一个间隔,将数据分为gap个子序列,所有距离为gap的对象存放在同一个子序列中,于是数据表中的元素就被分成了gap个组,分组确定后,在每一个小组中进行直接插入排序(参考直接插入排序与二分插入排序的C++实现),局部排序完成后,缩小gap, 重复上述步骤,直至取到gap=1时,完成最后一次直接插入排序. 为什么这个算法会起作用:开始的时候gap…
在前面复习了三个简单排序Java数据结构和算法(三)--三大排序--冒泡.选择.插入排序,属于算法的基础,但是效率是偏低的,所以现在 学习高级排序 插入排序存在的问题: 插入排序在逻辑把数据分为两部分,左边:数据是有序的,右边:数据是无序的 上图中的元素2,是最小的数据,但是在最右边,我们需要和之前的元素进行比较,然后每个元素都要后移,直到找到应该插入的位置,这里 对于元素2来说,所有的元素都要后移一位 这个过程将近存在N次复制,移位的次数平均N/2,所以执行效率是O(N^2) 所以如果能以某种…
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便以后复习. 之所以把归并排序.快速排序.希尔排序.堆排序放在一起比较,是因为它们的平均时间复杂度都为 O(nlogn). 请大家带着问题:快排和归并用的都是分治思想,递推公式和递归代码也非常相似,那它们的区别在哪里呢 ? 来阅读下文. 2. 归并排序(Merge Sort) 思想 排序一个数…
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以及平衡二叉树的构建与查找,然后还聊了哈希表的构建与查找.接下来的几篇博客中我们就集中的聊一下常见的集中排序方式,并并给出相应的时间复杂度.本篇博客我们将会详细的介绍冒泡排序.插入排序.希尔排序以及选择排序,下篇博客将继续介绍堆排序.归并排序以及快速排序的相关内容.当然上述内容的代码实现我们依然采用S…
javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * 否则,创建两个数组,一个用来存放比基准值小的元素,另一个用来存放比基准值大的元素. * 这里的基准值取自数组的第一个元素. * 接下来,这个函数对原始数组的元素进行遍历,根据它们与基准值的关系将它们放到合适的数组中. * 然后对于较小的数组和较大的数组分别递归调用这个函数. * 当递归结束时,再将较…
数据结构实验之排序六:希尔排序 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description 我们已经学习了各种排序方法,知道在不同的情况下要选择不同的排序算法,以期达到最好的排序效率:对于待排序数据来说,若数据基本有序且记录较少时, 直接插入排序的效率是非常好的,希尔排序就是针对一组基本有序的少量数据记录进行排序的高效算法.你的任务是对于给定的数据进行希尔排序,其中增量dk=n/…
数据结构实验之排序六:希尔排序 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 我们已经学习了各种排序方法,知道在不同的情况下要选择不同的排序算法,以期达到最好的排序效率:对于待排序数据来说,若数据基本有序且记录较少时, 直接插入排序的效率是非常好的,希尔排序就是针对一组基本有序的少量数据记录进行排序的高效算法.你的任务是对于给定的数据进行希尔排序,其中增量dk=n/(2^k)(k=1,2…
数据结构 - 希尔排序(Shell's Sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24363981 希尔排序(Shell's Sort), 又称"缩小增量排序"(Diminishing Increment Sort), 是插入排序的一种. 主要思想是: 先将整个记录, 通过间隔分成若干个子序列, 分别进行插入排序, 待整个序列基本有序时, 再进行一次插入排序. 由于插入排…
1. 工作原理(定义) 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本.但希尔排序是非稳定排序算法. 希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序. 希尔排序实质上是一种分组插入方法.它的基本思想是:对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中:然后,对各组内的元素进…