04-希尔排序(python,oc)

简述:引入gap概念,分块进行插入排序。gap会根据要求递减,当 gap == 1 等于1时,为基本的插入排序。

  • 最优时间复杂度:根据步长序列的不同而不同
  • 最坏时间复杂度:O(n2)
  • 稳定型:不稳定

python3

# coding: utf-8

def shell_sort(alist):
    """希尔排序"""
    n = len(alist)
    gap = n // 2

    while gap > 0:
        for j in range(gap,n):
            i = j
            while i > 0:
                if j >= gap and alist[i] < alist[i - gap]:
                    alist[i], alist[i - gap] = alist[i - gap], alist[i]
                    i -= gap
                else:
                    break
        gap //= 2

if __name__ == "__main__":
    li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    print(li)
    shell_sort(li)
    print(li)
/**
 希尔算法
 */
- (void)shell_sort:(NSMutableArray *)arr {
    
    NSInteger gap = arr.count / 2;
    
    while (gap >= 1) {
        for (NSInteger i = gap; i < arr.count; i++) {
            NSInteger j = i;
            while (j > 0) {
                if (j >= gap && arr[j] < arr[j - gap]) {
                    NSNumber *temp = arr[j];
                    arr[j] = arr[j - gap];
                    arr[j - gap] = temp;
                    j -= gap;
                } else {
                    break;
                }
            }
        }
        // 缩短步长
        gap = gap / 2;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 本篇文章基本是从常用排序算法总结(一)快速排序引申而来,其中大部分代码和描述都来自这两篇文章。 时间复杂度 ...
    王三的猫阿德阅读 1,137评论 0 1
  • <希尔排序> 详细代码请参考Algorithm。参考代码比文字好理解。希尔排序,也称递减增量排序算法,是插入排序的...
    明明的魔样阅读 1,794评论 0 1
  • 本文分析冒泡、选择、插入、希尔、快速、归并和堆排序,为不影响阅读体验,将关于时间、空间复杂度和稳定性的概念放在博文...
    DeppWang阅读 440评论 0 2
  • Ba la la la ~ 读者朋友们,你们好啊,又到了冷锋时间,话不多说,发车! 1.冒泡排序(Bub...
    王饱饱阅读 1,817评论 0 7
  • 一个下午用来看完一部剧,这一次内心确是没有负罪感。 我们从小到大都活在别人的眼光中,小学中学时在父母和亲友身边,无...
    k艾菲阅读 367评论 0 1