zoukankan      html  css  js  c++  java
  • 每天一个小算法(Shell sort5)

    希尔排序的关键在于步长的选取。

    希尔排序的复杂度比较复杂,主要跟步长的选择有关,大概是 O(n logn^2),一般认为就是介于 O(n^2) 和 O(n logn) 之间。最好步长比较复杂,一般第一次取序列的一半,以后每次减半,直到步长为1。

      对于希尔排序为什么明显优于直接插入排序:“希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。”“可能希尔排序最重要的地方在于当用较小步长排序后,以前用的较大步长仍然是有序的。比如,如果一个数列以步长5进行了排序然后再以步长3进行排序,那么该数列不仅是以步长3有序,而且是以步长5有序。如果不是这样,那么算法在迭代过程中会打乱以前的顺序,那就不会以如此短的时间完成排序了。”

      复杂度:

      最差时间复杂度:根据步长串行的不同而不同。 已知最好的 O(n logn^2)

      最优时间复杂度:O(n)

      平均时间复杂度:根据步长串行的不同而不同。

      最差空间复杂度:O(n)

      稳定性:不稳定

    http://www.douban.com/note/318488333/

    以后的策略:主要以实现算法和书写伪代码为主。

  • 相关阅读:
    Vue(小案例_vue+axios仿手机app)_go实现退回上一个路由
    nyoj 635 Oh, my goddess
    nyoj 587 blockhouses
    nyoj 483 Nightmare
    nyoj 592 spiral grid
    nyoj 927 The partial sum problem
    nyoj 523 亡命逃窜
    nyoj 929 密码宝盒
    nyoj 999 师傅又被妖怪抓走了
    nyoj 293 Sticks
  • 原文地址:https://www.cnblogs.com/batteryhp/p/5020509.html
Copyright © 2011-2022 走看看