火狐浏览器将采用圆角标签页设计
|
但是大家会发现如果真的按照希尔排序的思想这样做得的话,我们会发现用了三层for循环,那么很显然时间复杂度就会达到我们目前遇到的最坏的情况即O(N*N*N),所以我们需要进行改进,主要就是改进分组排序的过程,之前我们是确定完步长之后,就通过for循环进行循环分组的排序,这里我们修改成直接和下一个for循环一起,直接进行循环分组
「改进后的代码」: 看完上面的图之后相信大家就基本了解希尔排序算法的思想了,那么接下来我们还是来分析一下希尔排序算法的特点吧:
说这么多还不如直接来个例子给大家看一下,大家就知道了: 十大经典排序算法-希尔排序,归并排序,快速排序前言这是十大经典排序算法详解的第二篇,这是之前第一篇文章的链接:十大经典排序算法详解(一)冒泡排序,选择排序,插入排序,没有看过的小伙伴可以看一下. 每次讲解都是「先采用文字」的方式帮助大家先熟悉一下算法的基本思想,之后我会在通过「图片的方式」来帮助大家分析排序算法的动态执行过程,这样就能够帮助大家更好的理解算法. 每次的图画起来都比较的繁琐,真的很耗费时间.所以如果你觉得文章写得还可以或者说对你有帮助的话,你可以选择一键三连,或者选择关注我的公众号:「萌萌哒的瓤瓤」 ,这对我真的很重要.UP在此谢谢各位了. 废话不多说了,下面开始我们的正文部分吧!!! 1-希尔排序 算法思想: 其实希尔排序的思想很简单,因为希尔排序的基本思想就是第一篇中间讲解的关于插入排序的基本思想,「只是希尔排序相比较与插入排序多加了一步就是确定步长」.之前在插入排序的过程中,我们的步长是固定的即为1,在希尔排序中我们的步长是不固定的,「一开始数组长度的一半,之后每次分组排序之后步长就再减半,直到步长到1为止」.这时候我们的排序就已经完成了.
说完了,那我们接下来还是通过图解的方式来帮助大家更好的理解希尔排序吧: 算法性能分析 由于这种方法采用双重循环对链表进行遍历,因此,时间复杂度为O(N^2)。其中,N为链表的长度。在遍历链表的过程中,使用了常量个额外的指针变量来保存当前遍历的结点、前驱结点和被删除的结点,因此,空间复杂度为O(1)。 递归法 主要思路为:对于结点cur,首先递归地删除以cur.next为首的子链表中重复的结点,接着从以cur.next为首的子链表中找出与cur有着相同数据域的结点并删除。
实现代码如下: (编辑:柳州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

