Python学习重点笔记:八大排序算法!.docVIP

  • 3
  • 0
  • 约2.79千字
  • 约 17页
  • 2020-11-07 发布于江苏
  • 举报
一、插入排序 介绍 插入排序基础操作就是将一个数据插入到已经排好序有序数据中,从而得到一个新、个数加一有序数据。 算法适适用于少许数据排序,时间复杂度为O(n^2)。 插入排算法是稳定排序方法。 步骤 ①从第一个元素开始,该元素能够认为已经被排序 ②取出下一个元素,在已经排序元素序列中从后向前扫描 ③假如该元素(已排序)大于新元素,将该元素移到下一位置 ④反复步骤3,直到找到已排序元素小于或等于新元素位置 ⑤将新元素插入到该位置中 ⑥反复步骤2 排序演示 算法实现 二、冒泡排序 介绍 冒泡排序(Bubble Sort)是一个简单排序算法,时间复杂度为O(n^2)。 它反复地走访过要排序数列,一次比较两个元素,假如她们次序错误就把她们交换过来。走访数列工作是反复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法名字由来是因为越小元素会经由交换慢慢“浮”到数列顶端。 原理 循环遍历列表,每次循环找出循环最大元素排在后面; 需要使用嵌套循环实现:外层循环控制总循环次数,内层循环负责每轮循环比较。 步骤 ①比较相邻元素。假如第一个比第二个大,就交换她们两个。 ②对每一对相邻元素作一样工作,从开始第一对到结尾最终一对。在这一点,最终元素应该会是最大数。 ③针对全部元素反复以上步骤,除了最终一个。 ④连续每次对越来越少元素反复上面步骤,直到没有任何一对数字需要比较。 算法实现: 三、快速排序 介绍 快速排序(Quicksort)是对冒泡排序一个改善,借用了分治思想,由C. A. R. Hoare在1962年提出。 基础思想 快速排序基础思想是:挖坑填数 + 分治法。 首先选出一个轴值(pivot,也有叫基准),经过一趟排序将待排统计分隔成独立两部分,其中一部分统计关键字均比另一部分关键字小,则可分别对这两部分统计继续进行排序,以达成整个序列有序。 实现步骤 ①从数列中挑出一个元素,称为 “基准”(pivot); ②重新排序数列,全部元素比基准值小摆放在基准前面,全部元素比基准值大摆在基准后面(相同数能够到任一边); ③对全部两个小数列反复第二步,直至各区间只有一个数。 排序演示 算法实现 四、希尔排序 介绍 希尔排序(Shell Sort)是插入排序一个,也是缩小增量排序,是直接插入排序算法一个更高效改善版本。希尔排序是非稳定排序算法,时间复杂度为:O(1.3n)。 希尔排序是基于插入排序以下两点性质而提出改善方法: ·插入排序在对几乎已经排好序数据操作时, 效率高, 即能够达成线性排序效率; ·但插入排序通常来说是低效, 因为插入排序每次只能将数据移动一位。 基础思想 ①希尔排序是把统计按下标一定量分组,对每组使用直接插入算法排序; ②伴随增量逐步降低,每组包1含关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法被终止。 排序演示 算法实现 五、选择排序 介绍 选择排序(Selection sort)是一个简单直观排序算法,时间复杂度为Ο(n2)。 基础思想 选择排序基础思想:比较 + 交换。 第一趟,在待排序统计r1 ~ r[n]中选出最小统计,将它和r1交换; 第二趟,在待排序统计r2 ~ r[n]中选出最小统计,将它和r2交换; 以这类推,第 i 趟,在待排序统计ri ~ r[n]中选出最小统计,将它和r[i]交换,使有序序列不停增加直到全部排序完成。 排序演示 选择排序示例动画。红色表示目前最小值,黄色表示已排序序列,蓝色表示目前位置。 算法实现 六、堆排序 介绍 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计一个排序算法,它是选择排序一个。 利用数组特点快速指定索引元素。 基础思想 堆分为大根堆和小根堆,是完全二叉树。 大根堆要求是每个节点值小于其父节点值,即A[PARENT[i]] =A[i]。 在数组非降序排序中,需要使用就是大根堆,因为依据大根堆要求可知,最大值一定在堆顶。 排序演示 算法实现 七、归并排序 介绍 归并排序(Merge sort)是建立在归并操作上一个有效排序算法。该算法是采取分治法(Divide and Conquer)一个很经典应用。 基础思想 归并排序算法是将两个(或两个以上)有序表合并成一个新有序表,即把待排序序列分为若干个子序列,每个子序列是有序。然后再把有序子序列合并为整体有序序列。 算法思想 自上而下递归法(假如序列共有n个元素) ① 将序列每相邻两个数字进行归并操作,形成 floor(n/2)个序列,排序后每个序列包含两个元素; ② 将上述序列再次归并,形成 floor(n/4)个序列,每个序列包含四个元素; ③ 反复步骤②,直到全部元素排序完成。 自下而上迭代法 ① 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后序列; ② 设定两个

文档评论(0)

1亿VIP精品文档

相关文档