数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发,分析和研究计算机加工的数据的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储结构及其相应的操作方法,为提高利用计算机解决问题的效率服务。
假设含 n个记录的文件内容为{R
1,R
2,…,R
n},相应的关键字为{k
1,k
2,…,k
n}。经过排序确定一种排列{R
j1,R
j2,…,R
jn},使得它们的关键字满足以下递增(或递减)关系:k
j1≤k
j2≤…≤k
jn(或k
j1≥k
j2≥…≥k
jn)。
若在待排序的一个序列中,R
i 和 R
j 的关键字相同,即k
i=k
j,且在排序前 R
i 领先于R
j,那么在排序后,如果R
i 和R
j 的相对次序保持不变,R
i 仍领先于R
j,则称此类排序方法为稳定的。若在排序后的序列中有可能出现R
j 领先于R
i 的情形,则称此类排序为不稳定的。
(1)内部排序。内部排序指待排序记录全部存放在内存中进行排序的过程。
(2)外部排序。外部排序指待排序记录的数量很大,以至于内存不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。
在排序过程中需要进行下列两种基本操作:比较两个关键字的大小;将记录从一个位置移动到另一个位置。前一种操作对大多数排序方法来说都是必要的,后一种操作可以通过改变记录的存储方式来避免。
1、直接插入排序
直接插入排序是一种简单的排序方法,具体做法是:在插入第 i 个记录时,R1、R2、…、Ri-1 已经排好序,这时将 Ri 的关键字 ki 依次与关键字 ki-1、ki-2 等进行比较,从而找到应该插入的位置并将 Ri 插入,插入位置及其后的记录依次向后移动。
【算法】直接插入排序算法。
直接插入排序法在最好情况下(待排序列已按关键码有序),每趟排序只需作 1 次比较目不需要移动元素,因此 n 个元素排序时的总比较次数为 n-1 次,总移动次数为 0 次。在最坏情况下(元素已经逆序排列),进行第 i 趟排序时,待插入的记录需要同前面的 i 个记录都进行 1 次比较,因此,总比较次数为
Σ
i