《数据结构》王道 第八章 排序

《数据结构》王道 第八章 排序

  • 1. 排序的基本概念
    • 1.1 算法的评价指标
  • 2. 插入排序
    • 2.1 算法实现
    • 2.2 算法效率分析
    • 2.3 优化
    • 2.4 对链表进行插入排序
  • 3. 希尔排序(shell sort)
    • 3.1 算法实现
    • 3.2 算法性能分析
  • 4. 交换排序
    • 4.1 冒泡排序
      • 4.1.1 算法实现
      • 4.1.2 算法性能分析
    • 4.2 快速排序(常考,代码最好会写)
      • 4.2.1 算法实现
      • 4.2.2 算法性能分析
  • 5. 选择排序
    • 5.1 简单选择排序
      • 5.1.1 算法实现
      • 5.1.2 算法性能分析
    • 5.2 堆排序
      • 5.2.1 堆的概念
      • 5.2.2 基于堆进行排序
        • 1. 建立大根堆
        • 2. 代码实现
        • 3. 基于大根堆进行排序
        • 4. 基于大根堆排序的代码
        • 5. 算法效率分析
        • 6. 稳定性
      • 5.3 堆的插入删除
        • 5.3.1 插入
        • 5.3.2 删除
  • 6. 归并排序(Merge Sort)
    • 6.1 算法实现
    • 6.2 算法效率分析
  • 7. 基数排序
    • 7.1 概念
    • 7.2 算法效率分析
    • 7.3 稳定性
    • 7.4 应用
  • 8. 外部排序
    • 8.1 外存和内存之间的数据交换
    • 8.2 外部排序原理
      • 8.2.1 构造初始归并段
      • 8.2.2 第一趟归并
      • 8.2.3 第二趟归并
      • 8.2.4 第三趟排序
    • 8.3 时间开销分析
    • 8.4 优化:多路归并
    • 8.5 优化:减少初始归并段数量(即r减小)
    • 8.6 什么是多路平衡归并
  • 9. 败者树
    • 9.1 应用
    • 9.2 实现思路
  • 10. 置换-选择排序(减少初始归并段的数量)
  • 11. 最佳归并树
    • 11.1 归并树的性质
    • 11.2 多路归并的最佳归并树
  • 12. 总结

1. 排序的基本概念

《数据结构》王道 第八章 排序_第1张图片

1.1 算法的评价指标

《数据结构》王道 第八章 排序_第2张图片

《数据结构》王道 第八章 排序_第3张图片
《数据结构》王道 第八章 排序_第4张图片

2. 插入排序

《数据结构》王道 第八章 排序_第5张图片
《数据结构》王道 第八章 排序_第6张图片
《数据结构》王道 第八章 排序_第7张图片
《数据结构》王道 第八章 排序_第8张图片
《数据结构》王道 第八章 排序_第9张图片
《数据结构》王道 第八章 排序_第10张图片
《数据结构》王道 第八章 排序_第11张图片

2.1 算法实现

《数据结构》王道 第八章 排序_第12张图片
《数据结构》王道 第八章 排序_第13张图片

2.2 算法效率分析

《数据结构》王道 第八章 排序_第14张图片
《数据结构》王道 第八章 排序_第15张图片
《数据结构》王道 第八章 排序_第16张图片
《数据结构》王道 第八章 排序_第17张图片
《数据结构》王道 第八章 排序_第18张图片

2.3 优化

《数据结构》王道 第八章 排序_第19张图片
《数据结构》王道 第八章 排序_第20张图片
《数据结构》王道 第八章 排序_第21张图片
《数据结构》王道 第八章 排序_第22张图片
《数据结构》王道 第八章 排序_第23张图片
《数据结构》王道 第八章 排序_第24张图片
《数据结构》王道 第八章 排序_第25张图片
《数据结构》王道 第八章 排序_第26张图片
《数据结构》王道 第八章 排序_第27张图片
《数据结构》王道 第八章 排序_第28张图片
《数据结构》王道 第八章 排序_第29张图片

2.4 对链表进行插入排序

《数据结构》王道 第八章 排序_第30张图片
《数据结构》王道 第八章 排序_第31张图片

3. 希尔排序(shell sort)

《数据结构》王道 第八章 排序_第32张图片
《数据结构》王道 第八章 排序_第33张图片
元素个数除以2等于4.
《数据结构》王道 第八章 排序_第34张图片
《数据结构》王道 第八章 排序_第35张图片
《数据结构》王道 第八章 排序_第36张图片
《数据结构》王道 第八章 排序_第37张图片
《数据结构》王道 第八章 排序_第38张图片
《数据结构》王道 第八章 排序_第39张图片
《数据结构》王道 第八章 排序_第40张图片
《数据结构》王道 第八章 排序_第41张图片
《数据结构》王道 第八章 排序_第42张图片
还有其他分割方式,就是每一趟分割的距离不一样,但是分割完的每个子表都是进行直接插入排序
《数据结构》王道 第八章 排序_第43张图片
《数据结构》王道 第八章 排序_第44张图片
《数据结构》王道 第八章 排序_第45张图片
《数据结构》王道 第八章 排序_第46张图片
《数据结构》王道 第八章 排序_第47张图片
在这里插入图片描述
《数据结构》王道 第八章 排序_第48张图片

3.1 算法实现

《数据结构》王道 第八章 排序_第49张图片
另一种方法(比较符合上面的例子):

void ShellSort(int array[], int n) 
{
	int i, j, step;
	for (step = n / 2; step > 0; step = step / 2)  //这里的step步长是根据10个元素这种情况定义的
	{
		for (i = 0; i < step; i++)  //i是子数组的编号
		{
			for (j = i + step; j < n; j = j + step)  //数组下标j,数组步长下标j+step
			{
				if (array[j] < array[j - step])
				{
					int temp = array[j];  //把数组下标j的值放到temp中
					int k = j - step;
 
					while (k >= 0 && temp < array[k])
					{
						array[k + step] = array[k];  //把大的值往后插入
						k = k - step;
					}
					array[k + step] = temp;  //把小的值往前插入
				}
			}
		}
	}
}

3.2 算法性能分析

《数据结构》王道 第八章 排序_第50张图片
《数据结构》王道 第八章 排序_第51张图片
《数据结构》王道 第八章 排序_第52张图片

4. 交换排序

4.1 冒泡排序

在这里插入图片描述
《数据结构》王道 第八章 排序_第53张图片
《数据结构》王道 第八章 排序_第54张图片
《数据结构》王道 第八章 排序_第55张图片
《数据结构》王道 第八章 排序_第56张图片
《数据结构》王道 第八章 排序_第57张图片
《数据结构》王道 第八章 排序_第58张图片
《数据结构》王道 第八章 排序_第59张图片
《数据结构》王道 第八章 排序_第60张图片
《数据结构》王道 第八章 排序_第61张图片
《数据结构》王道 第八章 排序_第62张图片
《数据结构》王道 第八章 排序_第63张图片
在这里插入图片描述
《数据结构》王道 第八章 排序_第64张图片
在这里插入图片描述
依次进行:
《数据结构》王道 第八章 排序_第65张图片
在这里插入图片描述

4.1.1 算法实现

《数据结构》王道 第八章 排序_第66张图片

4.1.2 算法性能分析

《数据结构》王道 第八章 排序_第67张图片
《数据结构》王道 第八章 排序_第68张图片
《数据结构》王道 第八章 排序_第69张图片
《数据结构》王道 第八章 排序_第70张图片

4.2 快速排序(常考,代码最好会写)

《数据结构》王道 第八章 排序_第71张图片
举个例子:
这里我们选第一个元素作为枢轴。
在这里插入图片描述
一开始是从high从后往前搜索比枢轴小的元素,并移动到左边,即low所指的位置。
《数据结构》王道 第八章 排序_第72张图片
《数据结构》王道 第八章 排序_第73张图片
《数据结构》王道 第八章 排序_第74张图片
当把右边的一个元素移动前面后,high的位置就空出来了,所以从low开始从前往后查找比枢轴大的元素移动high的位置,即移到右边。每次都这样循环进行下去,直到把比枢轴小的元素都移到枢轴的左边,比枢轴大于或等于的元素都移到枢轴的右边为止。
《数据结构》王道 第八章 排序_第75张图片
《数据结构》王道 第八章 排序_第76张图片
《数据结构》王道 第八章 排序_第77张图片
《数据结构》王道 第八章 排序_第78张图片
《数据结构》王道 第八章 排序_第79张图片
《数据结构》王道 第八章 排序_第80张图片
《数据结构》王道 第八章 排序_第81张图片
在这里插入图片描述
《数据结构》王道 第八章 排序_第82张图片
《数据结构》王道 第八章 排序_第83张图片
接下来对枢轴左边继续一样的处理,此时重新选取左边的第一个元素作为枢轴(每一次都得重新选择枢轴):
《数据结构》王道 第八章 排序_第84张图片
《数据结构》王道 第八章 排序_第85张图片
当low==high时,枢轴位置就确定了。
接下来对一开始的枢轴(49)的右边进行同样的操作。
《数据结构》王道 第八章 排序_第86张图片
《数据结构》王道 第八章 排序_第87张图片
以此类推:
最后排完序是这样的:
《数据结构》王道 第八章 排序_第88张图片

4.2.1 算法实现

《数据结构》王道 第八章 排序_第89张图片

4.2.2 算法性能分析

《数据结构》王道 第八章 排序_第90张图片
《数据结构》王道 第八章 排序_第91张图片
《数据结构》王道 第八章 排序_第92张图片
《数据结构》王道 第八章 排序_第93张图片
《数据结构》王道 第八章 排序_第94张图片
《数据结构》王道 第八章 排序_第95张图片
《数据结构》王道 第八章 排序_第96张图片
《数据结构》王道 第八章 排序_第97张图片
《数据结构》王道 第八章 排序_第98张图片
《数据结构》王道 第八章 排序_第99张图片
《数据结构》王道 第八章 排序_第100张图片
《数据结构》王道 第八章 排序_第101张图片
《数据结构》王道 第八章 排序_第102张图片
《数据结构》王道 第八章 排序_第103张图片
《数据结构》王道 第八章 排序_第104张图片
《数据结构》王道 第八章 排序_第105张图片
《数据结构》王道 第八章 排序_第106张图片

5. 选择排序

《数据结构》王道 第八章 排序_第107张图片

5.1 简单选择排序

《数据结构》王道 第八章 排序_第108张图片
在这里插入图片描述
《数据结构》王道 第八章 排序_第109张图片
《数据结构》王道 第八章 排序_第110张图片

5.1.1 算法实现

《数据结构》王道 第八章 排序_第111张图片

5.1.2 算法性能分析

《数据结构》王道 第八章 排序_第112张图片
《数据结构》王道 第八章 排序_第113张图片

5.2 堆排序

5.2.1 堆的概念

在这里插入图片描述
《数据结构》王道 第八章 排序_第114张图片
《数据结构》王道 第八章 排序_第115张图片
《数据结构》王道 第八章 排序_第116张图片

5.2.2 基于堆进行排序

《数据结构》王道 第八章 排序_第117张图片
我们以大根堆为例,按照步骤来:

1. 建立大根堆

《数据结构》王道 第八章 排序_第118张图片
《数据结构》王道 第八章 排序_第119张图片
《数据结构》王道 第八章 排序_第120张图片
《数据结构》王道 第八章 排序_第121张图片
《数据结构》王道 第八章 排序_第122张图片
《数据结构》王道 第八章 排序_第123张图片
《数据结构》王道 第八章 排序_第124张图片
在这里插入图片描述
《数据结构》王道 第八章 排序_第125张图片
《数据结构》王道 第八章 排序_第126张图片
所以最后建成的大根堆是这样子的:
《数据结构》王道 第八章 排序_第127张图片

2. 代码实现

《数据结构》王道 第八章 排序_第128张图片
我们直接看当进行到调整根结点的情况:
《数据结构》王道 第八章 排序_第129张图片
《数据结构》王道 第八章 排序_第130张图片
《数据结构》王道 第八章 排序_第131张图片
《数据结构》王道 第八章 排序_第132张图片
《数据结构》王道 第八章 排序_第133张图片
《数据结构》王道 第八章 排序_第134张图片
《数据结构》王道 第八章 排序_第135张图片
在这里插入图片描述

3. 基于大根堆进行排序

《数据结构》王道 第八章 排序_第136张图片

《数据结构》王道 第八章 排序_第137张图片
《数据结构》王道 第八章 排序_第138张图片
《数据结构》王道 第八章 排序_第139张图片
《数据结构》王道 第八章 排序_第140张图片
《数据结构》王道 第八章 排序_第141张图片
《数据结构》王道 第八章 排序_第142张图片
《数据结构》王道 第八章 排序_第143张图片
依次执行下去,直到剩下最后一个元素:
《数据结构》王道 第八章 排序_第144张图片
《数据结构》王道 第八章 排序_第145张图片

4. 基于大根堆排序的代码

《数据结构》王道 第八章 排序_第146张图片

5. 算法效率分析

《数据结构》王道 第八章 排序_第147张图片
《数据结构》王道 第八章 排序_第148张图片
《数据结构》王道 第八章 排序_第149张图片
《数据结构》王道 第八章 排序_第150张图片
《数据结构》王道 第八章 排序_第151张图片
《数据结构》王道 第八章 排序_第152张图片

6. 稳定性

《数据结构》王道 第八章 排序_第153张图片
《数据结构》王道 第八章 排序_第154张图片

《数据结构》王道 第八章 排序_第155张图片
《数据结构》王道 第八章 排序_第156张图片

5.3 堆的插入删除

对比关键字次数的常考的考点

5.3.1 插入

《数据结构》王道 第八章 排序_第157张图片
《数据结构》王道 第八章 排序_第158张图片
《数据结构》王道 第八章 排序_第159张图片
《数据结构》王道 第八章 排序_第160张图片
《数据结构》王道 第八章 排序_第161张图片

5.3.2 删除

《数据结构》王道 第八章 排序_第162张图片
《数据结构》王道 第八章 排序_第163张图片
《数据结构》王道 第八章 排序_第164张图片
《数据结构》王道 第八章 排序_第165张图片
《数据结构》王道 第八章 排序_第166张图片
《数据结构》王道 第八章 排序_第167张图片
《数据结构》王道 第八章 排序_第168张图片
《数据结构》王道 第八章 排序_第169张图片

6. 归并排序(Merge Sort)

在这里插入图片描述
《数据结构》王道 第八章 排序_第170张图片
《数据结构》王道 第八章 排序_第171张图片
《数据结构》王道 第八章 排序_第172张图片
《数据结构》王道 第八章 排序_第173张图片
《数据结构》王道 第八章 排序_第174张图片
《数据结构》王道 第八章 排序_第175张图片

6.1 算法实现

在这里插入图片描述
《数据结构》王道 第八章 排序_第176张图片
在这里插入图片描述
《数据结构》王道 第八章 排序_第177张图片
《数据结构》王道 第八章 排序_第178张图片
《数据结构》王道 第八章 排序_第179张图片
《数据结构》王道 第八章 排序_第180张图片
《数据结构》王道 第八章 排序_第181张图片
《数据结构》王道 第八章 排序_第182张图片
《数据结构》王道 第八章 排序_第183张图片
《数据结构》王道 第八章 排序_第184张图片
《数据结构》王道 第八章 排序_第185张图片

6.2 算法效率分析

《数据结构》王道 第八章 排序_第186张图片
《数据结构》王道 第八章 排序_第187张图片

7. 基数排序

每一趟都是先分配收集
从个位开始分配:
《数据结构》王道 第八章 排序_第188张图片
《数据结构》王道 第八章 排序_第189张图片
《数据结构》王道 第八章 排序_第190张图片
《数据结构》王道 第八章 排序_第191张图片
《数据结构》王道 第八章 排序_第192张图片
收集是从个位比较大的开始收集。因为我们是要形成一个递减序列。
《数据结构》王道 第八章 排序_第193张图片
《数据结构》王道 第八章 排序_第194张图片
《数据结构》王道 第八章 排序_第195张图片
《数据结构》王道 第八章 排序_第196张图片
《数据结构》王道 第八章 排序_第197张图片
《数据结构》王道 第八章 排序_第198张图片
《数据结构》王道 第八章 排序_第199张图片
《数据结构》王道 第八章 排序_第200张图片
《数据结构》王道 第八章 排序_第201张图片
《数据结构》王道 第八章 排序_第202张图片
《数据结构》王道 第八章 排序_第203张图片
《数据结构》王道 第八章 排序_第204张图片
《数据结构》王道 第八章 排序_第205张图片
《数据结构》王道 第八章 排序_第206张图片

7.1 概念

《数据结构》王道 第八章 排序_第207张图片

7.2 算法效率分析

《数据结构》王道 第八章 排序_第208张图片
《数据结构》王道 第八章 排序_第209张图片
《数据结构》王道 第八章 排序_第210张图片

7.3 稳定性

《数据结构》王道 第八章 排序_第211张图片
《数据结构》王道 第八章 排序_第212张图片
《数据结构》王道 第八章 排序_第213张图片
《数据结构》王道 第八章 排序_第214张图片

7.4 应用

《数据结构》王道 第八章 排序_第215张图片
《数据结构》王道 第八章 排序_第216张图片
《数据结构》王道 第八章 排序_第217张图片
《数据结构》王道 第八章 排序_第218张图片

8. 外部排序

8.1 外存和内存之间的数据交换

《数据结构》王道 第八章 排序_第219张图片
《数据结构》王道 第八章 排序_第220张图片
《数据结构》王道 第八章 排序_第221张图片

8.2 外部排序原理

《数据结构》王道 第八章 排序_第222张图片

8.2.1 构造初始归并段

《数据结构》王道 第八章 排序_第223张图片
《数据结构》王道 第八章 排序_第224张图片
《数据结构》王道 第八章 排序_第225张图片
《数据结构》王道 第八章 排序_第226张图片
《数据结构》王道 第八章 排序_第227张图片
这样就完成了一个归并段的初始化,接下来以此类推:
《数据结构》王道 第八章 排序_第228张图片

8.2.2 第一趟归并

《数据结构》王道 第八章 排序_第229张图片
《数据结构》王道 第八章 排序_第230张图片
《数据结构》王道 第八章 排序_第231张图片
《数据结构》王道 第八章 排序_第232张图片
《数据结构》王道 第八章 排序_第233张图片
《数据结构》王道 第八章 排序_第234张图片
《数据结构》王道 第八章 排序_第235张图片
《数据结构》王道 第八章 排序_第236张图片
《数据结构》王道 第八章 排序_第237张图片

《数据结构》王道 第八章 排序_第238张图片
《数据结构》王道 第八章 排序_第239张图片
《数据结构》王道 第八章 排序_第240张图片
《数据结构》王道 第八章 排序_第241张图片
《数据结构》王道 第八章 排序_第242张图片
《数据结构》王道 第八章 排序_第243张图片
《数据结构》王道 第八章 排序_第244张图片
第一趟归并结束。

8.2.3 第二趟归并

《数据结构》王道 第八章 排序_第245张图片
《数据结构》王道 第八章 排序_第246张图片
《数据结构》王道 第八章 排序_第247张图片
《数据结构》王道 第八章 排序_第248张图片
《数据结构》王道 第八章 排序_第249张图片
依次进行下去,得到:
《数据结构》王道 第八章 排序_第250张图片
《数据结构》王道 第八章 排序_第251张图片
《数据结构》王道 第八章 排序_第252张图片
《数据结构》王道 第八章 排序_第253张图片
第二趟结束。

8.2.4 第三趟排序

《数据结构》王道 第八章 排序_第254张图片
《数据结构》王道 第八章 排序_第255张图片

8.3 时间开销分析

《数据结构》王道 第八章 排序_第256张图片

8.4 优化:多路归并

初始归并段已经完成了。
《数据结构》王道 第八章 排序_第257张图片
《数据结构》王道 第八章 排序_第258张图片
《数据结构》王道 第八章 排序_第259张图片
《数据结构》王道 第八章 排序_第260张图片
《数据结构》王道 第八章 排序_第261张图片
《数据结构》王道 第八章 排序_第262张图片

《数据结构》王道 第八章 排序_第263张图片

8.5 优化:减少初始归并段数量(即r减小)

《数据结构》王道 第八章 排序_第264张图片
《数据结构》王道 第八章 排序_第265张图片
《数据结构》王道 第八章 排序_第266张图片
《数据结构》王道 第八章 排序_第267张图片
《数据结构》王道 第八章 排序_第268张图片

8.6 什么是多路平衡归并

《数据结构》王道 第八章 排序_第269张图片
《数据结构》王道 第八章 排序_第270张图片
《数据结构》王道 第八章 排序_第271张图片

9. 败者树

《数据结构》王道 第八章 排序_第272张图片
《数据结构》王道 第八章 排序_第273张图片
《数据结构》王道 第八章 排序_第274张图片
《数据结构》王道 第八章 排序_第275张图片
《数据结构》王道 第八章 排序_第276张图片
《数据结构》王道 第八章 排序_第277张图片
《数据结构》王道 第八章 排序_第278张图片
《数据结构》王道 第八章 排序_第279张图片
派大星只需要在自己在一边一路打上去就行了。
《数据结构》王道 第八章 排序_第280张图片

9.1 应用

《数据结构》王道 第八章 排序_第281张图片
《数据结构》王道 第八章 排序_第282张图片
《数据结构》王道 第八章 排序_第283张图片
《数据结构》王道 第八章 排序_第284张图片
《数据结构》王道 第八章 排序_第285张图片
《数据结构》王道 第八章 排序_第286张图片

9.2 实现思路

《数据结构》王道 第八章 排序_第287张图片
《数据结构》王道 第八章 排序_第288张图片
《数据结构》王道 第八章 排序_第289张图片

10. 置换-选择排序(减少初始归并段的数量)

《数据结构》王道 第八章 排序_第290张图片
《数据结构》王道 第八章 排序_第291张图片
《数据结构》王道 第八章 排序_第292张图片
《数据结构》王道 第八章 排序_第293张图片
《数据结构》王道 第八章 排序_第294张图片
《数据结构》王道 第八章 排序_第295张图片
《数据结构》王道 第八章 排序_第296张图片
继续进行下去:
《数据结构》王道 第八章 排序_第297张图片
《数据结构》王道 第八章 排序_第298张图片
《数据结构》王道 第八章 排序_第299张图片
《数据结构》王道 第八章 排序_第300张图片
《数据结构》王道 第八章 排序_第301张图片
《数据结构》王道 第八章 排序_第302张图片
《数据结构》王道 第八章 排序_第303张图片
《数据结构》王道 第八章 排序_第304张图片
《数据结构》王道 第八章 排序_第305张图片
《数据结构》王道 第八章 排序_第306张图片

11. 最佳归并树

11.1 归并树的性质

在这里插入图片描述
《数据结构》王道 第八章 排序_第307张图片
《数据结构》王道 第八章 排序_第308张图片
《数据结构》王道 第八章 排序_第309张图片

11.2 多路归并的最佳归并树

《数据结构》王道 第八章 排序_第310张图片
《数据结构》王道 第八章 排序_第311张图片
《数据结构》王道 第八章 排序_第312张图片
《数据结构》王道 第八章 排序_第313张图片
《数据结构》王道 第八章 排序_第314张图片
在这里插入图片描述
《数据结构》王道 第八章 排序_第315张图片
《数据结构》王道 第八章 排序_第316张图片
《数据结构》王道 第八章 排序_第317张图片
《数据结构》王道 第八章 排序_第318张图片
《数据结构》王道 第八章 排序_第319张图片
《数据结构》王道 第八章 排序_第320张图片

12. 总结

《数据结构》王道 第八章 排序_第321张图片

你可能感兴趣的:(考研数据结构,数据结构,排序算法,算法,c++)