数据结构 ---- 第七章 排序

框架

排序

基本概念 内部排序 外部排序
稳定性 衡量标准 插入排序 交换排序 选择排序 归并排序 基数排序 多路归并排序
  时空复杂度 直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 简单选择排序 堆排序      

 

各种内部排序算法的比较

  插入排序 交换排序 选择排序    
排序方法 直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 简单选择排序 堆排序 归并排序 基数排序
时间复杂度 O(n) O(n) O(n^{1.3}~n^{2}) O(n^{2}) O(nlog_{2}n) O(n^{2}) O(nlog_{2}n) O(nlog_{2}n O(d(n+r))
空间复杂度 O(1) O(1) O(1) O(1)

O(1)

递归栈最差O(n)

O(1) O(1) O(n)

O(r)

r个队列

 

稳定性 稳定 稳定 不稳定 稳定 不稳定 不稳定 不稳定 稳定 稳定
简述

①在L[1,...,i-1]中找到L[i]的插入位置k

②将L[k,...,i-1]中的元素全部后移一个位置

③将L[i]复制到L[k]

①二分法找到L[i]在L[1,...,i-1]中的插入位置k

②将L[k,...,i-1]中的元素全部后移一个位置

③将L[i]复制到L[k]

将待排序表分割为L[i,i+d,...,i+kd]的特殊子表,分别进行插入排序,当表中元素已基本有序时,再对全体记录进行一次直接插入排序。

d1=n/2;d_[i+1]=\left \lfloor di/2 \right \rfloor

从后往前,两两比较,交换 取一个元素做为基准,将大于,小于它的分为二部分递归 第i次选[i,n]中最小元素放到i位置 大根堆(根大于儿子,从下往上,右往左,儿子较大者>当前结点,交换这两个的值,),小根堆(反之) 将两个或两个以上的有序表组合成一个新的有序表

(特别:不基于比较进行排序)(多关键字排序思想)

按关键字d优先级->优先级高 排d次

(利用其稳定性。)

外部排序

概念:文件记录庞大,内存一次放不下时,需要将待排序的记录存储在外存上,排序时再把数据一部分一部分的调入内存。排完序后放到原文件。

常用方法:归并排序

败者树:除根节点存最小值(即最后胜利者)外,其他非叶结点均存放  左右子树的胜者  中的败者。

例:

数据结构 ---- 第七章 排序_第1张图片

多路平衡归并排序(这块不难,拿书看看,熟悉一下流程就可以了。)

1、置换-选择排序(生成初始归并段)

2、最佳归并树(多趟归并排序)

你可能感兴趣的:(数据结构)