读书笔记之《数据结构》---第十章 内部排序

本章目录
1.概述
2.插入排序
3.快速排序
4.选择排序
5.归并排序
6.基数排序
7.各种内部排序方法的比较讨论

概述
排序的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列
排序方法的稳定性:若在排序后的序列中Ri仍领先于Rj,则称所用的排序方法是稳定的,反之若可能使排序后的序列中Rj领先于RI,则称排序方法是不稳定的

排序方法分为两类:
1.内部排序:待排序记录放在计算机存储器中进行的排序过程
2.外部排序:待排序记录的数量太大,需要分批次装入内存,在排序过程中需要对外出进行访问的排序过程。

插入排序
直接插入排序:是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个记录数增1的有序表。
算法实现:先将序列的第一个记录看成是一个有序子序列,然后从第2个记录开始逐个插入。
读书笔记之《数据结构》---第十章 内部排序_第1张图片
读书笔记之《数据结构》---第十章 内部排序_第2张图片

折半插入排序:为了减少简单插入过程中的查找操作,将插入排序的查找过程改为折半查找。
读书笔记之《数据结构》---第十章 内部排序_第3张图片

2-路插入排序:减少折半插入中的移动操作,将初始数据看成是以选定值为最大,和最小的两个数组,分别进行插入和移动。
读书笔记之《数据结构》---第十章 内部排序_第4张图片

希尔排序:先将整个待排记录分割成为若干子序列分别进行直接插入排序,待整个序列基本有序后,对全体记录进行一次直接插入排序。需要注意:增量之间没有除1之外的公因子。
读书笔记之《数据结构》---第十章 内部排序_第5张图片
读书笔记之《数据结构》---第十章 内部排序_第6张图片

快速排序

气泡排序:借助“交换”进行的排序中的最简单的一种,进行升序冒泡排序中,每相邻的两个记录进行对比,如果keyi>keyj(i 读书笔记之《数据结构》---第十章 内部排序_第7张图片

快速排序:气泡排序的一种改进,基本思路是每进行一趟遍历,将序列分割成两个独立的有序的部分,其实就是将整个序列看成两个气泡。在对含有n个元素的数组S的一次快速排序过程中,设置low=0,height=n-1,已S[0]为给定值并赋值给t,从height开始向左遍历并且height自减,找到第一个小于t的数据元素S[height],然后S[low]=S[height],再从low开始向右遍历并且low自加,找到第一个大于t的数据元素S[low],然后S[height]=S[low],知道low=height为止时,最后将t赋值给S[low]或S[height]一次快速排序结束。

读书笔记之《数据结构》---第十章 内部排序_第8张图片

选择排序
选择排序的基本思想:每一趟n-i+1个记录中选取关键字最小的记录作为有序序列中的第i个记录,简单来所,就是第i次遍历都从下标为i的数据元素开始向后找出最小的放入数组下标i-1中。

简单选择排序:
读书笔记之《数据结构》---第十章 内部排序_第9张图片

树形选择排序:将对剩下的元素的顺序遍历过程改变为,进行两两比较将其中值小的生成新的含有一般元素的数据元素集合,然后继续两两比较,直至获得最小的数据元素。该方法需要较多的辅助存储空间
读书笔记之《数据结构》---第十章 内部排序_第10张图片

堆的定义:
读书笔记之《数据结构》---第十章 内部排序_第11张图片

堆排序:基本思路,将待排序的一维数组看成是一个完全二叉树,将其生成一个堆,由定义可知,根元素必定是最小值(或最大值),将根输出,然后将剩余元素再调整成堆。
读书笔记之《数据结构》---第十章 内部排序_第12张图片
生成堆的方法:将序列看成一棵完全二叉树,从最后一个非终端结点[n/2]开始,将该点与它的左右子树根结点比较,将最小的移动到该结点位置,一直将该结点移动到使该子树符合堆定义为止,一直遍历到序列第1个结点,就构造好了一个堆。
读书笔记之《数据结构》---第十章 内部排序_第13张图片
调整堆的方法:如下图,如果将13输出,然后将序列中最后一个值97移到第一位,可知,破坏了堆的结构,需要调整,判断左右子树根节点,取值小的27与97互换,可知右子树对结构被破坏,用同样的方法进行调整,
读书笔记之《数据结构》---第十章 内部排序_第14张图片

读书笔记之《数据结构》---第十章 内部排序_第15张图片

归并排序
基本思路:将含有n个记录的序列看成是n个有序的子序列,然后对这些子序列两两归并,如此重复,知道得到长度为n的有序序列为止。
读书笔记之《数据结构》---第十章 内部排序_第16张图片
读书笔记之《数据结构》---第十章 内部排序_第17张图片
读书笔记之《数据结构》---第十章 内部排序_第18张图片

基数排序
基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序。
基本思路:例如,关键字K为数值型,0<=K<=999,可以将关键字看成(K0百位数,K1十位数,K2个位数)三个关键字组合,然后通过K0,将记录分成有序的10组,在对每组用K1在分成有序的10组,然后在用K2分,如此便得到了有序序列。
分为两种:
1.最高位优先法
2.最低位优先法

链式基数排序:
读书笔记之《数据结构》---第十章 内部排序_第19张图片
读书笔记之《数据结构》---第十章 内部排序_第20张图片
读书笔记之《数据结构》---第十章 内部排序_第21张图片
读书笔记之《数据结构》---第十章 内部排序_第22张图片

各种内部排序方法的比较讨论
读书笔记之《数据结构》---第十章 内部排序_第23张图片

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