摘要: 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现。 基本思想 希尔排序是把记录按 阅读全文
posted @ 2021-08-18 18:00 brady-wang 阅读(2955) 评论(0) 推荐(0) 编辑
摘要: 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于 阅读全文
posted @ 2021-08-18 17:59 brady-wang 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 基本步骤 三数取中 在快排的 阅读全文
posted @ 2021-08-18 17:58 brady-wang 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 分而治之 可以看到 阅读全文
posted @ 2021-08-18 17:57 brady-wang 阅读(391) 评论(0) 推荐(0) 编辑
摘要: 快速排序是冒泡排序的改进版,也是最好的一种内排序,在很多面试题中都会出现,也是作为程序员必须掌握的一种排序方法。 思想:1.在待排序的元素任取一个元素作为基准(通常选第一个元素,但最的选择方法是从待排序元素中随机选取一个作为基准),称为基准元素; 2.将待排序的元素进行分区,比基准元素大的元素放在它 阅读全文
posted @ 2021-08-18 16:04 brady-wang 阅读(763) 评论(0) 推荐(0) 编辑
摘要: 显然,我们从图中可以看出快排运用了二分的思想,首先选择一个基准,定义左右两端指针,先从左到右进行扫描直到,R[hi] < temp,将R[hi]移动至lo所在位置 从右往左进行扫描,直到R[lo] > temp,将R[lo]移动到hi所在位置上,左右端指针在排序过程中从数组的两端往中间进行靠近,直到 阅读全文
posted @ 2021-08-18 15:39 brady-wang 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: 关于时间复杂度: 平方阶 阅读全文
posted @ 2021-08-18 10:14 brady-wang 阅读(287) 评论(0) 推荐(0) 编辑
摘要: def bubble(a): n = len(a) for i in range(1,n): for j in range(0,n-i): if a[j] > a[j+1]: a[j],a[j+1] = a[j+1],a[j] if __name__ == '__main__': lst = [6, 阅读全文
posted @ 2021-08-18 09:52 brady-wang 阅读(29) 评论(0) 推荐(0) 编辑