数据结构课程设计.docxVIP

  • 5
  • 0
  • 约8.23千字
  • 约 12页
  • 2021-03-25 发布于山东
  • 举报
数据结构课程设计 题 目 利用随机函数产生 30000 个随机整数,利用插入排序、 希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序 等排序方法进行排序, 统计每一种排序上机所花费的时间, 并和 理论上时间进行对比分析。 学生姓名 学 号 学 院 专 业 指导教师 年 月 日 一、 设计题目 利用随机函数产生 30000 个随机整数,利用插入排序、起泡排序、快速排序、选择排序、堆排序、归并排序等排序方法进行排序,统计每一种排序上机所花费的时间,并和理论上时间进行对比分析。 二、 算法设计的思想 1. 排序 操作方法:第一趟,从 n 个 中找出关 最小的 与第一个 交 ; 第 二趟,从第二个 开始的 n-1 个 中再 出关 最小的 与第二个 交 ;如此,第 i 趟, 从第 i 个 开始的 n-i+1 个 中 出关 最小的 与第 i 个 交 ,直到整个序列按关 有序。 【效率分析】 空 效率: 用了一个 助 元。 效率: 排序中, 所需 行 移 的操作次数 小, 其最小 0,最大 3(n-1)。然而,无 的初始排列如何,所需 行的关 字之 的 比 次数相同,均 n(n-1)/2。因此, 的 复 度也是 O(n2)。 2.直接插入排序 有 n 个 ,存放在数 r 中,重新安排 在数 中的存放 序,使得按关 有序。即 r[1].key ≤r[2].key ≤??≤ r[n].key 先来看看向有序表中插入一个 的方法: 1 j≤n, r[1].key ≤r[2].key ≤??≤ r[j-1].key ,将 r[j] 插入,重新安排存放 序,使得 r[1].key ≤ r[2].key ≤??≤ r[j].key ,得到新的有序表, 数增1。【效率分析】 空 效率: 用了一个 助 元。 效率:向有序表中逐个插入 的操作, 行了 n-1 趟,每趟操作分 比 关 和移 , 而比 的次数和移 的次数取决于待排序列按关 的初始排列。 最好情况下:即待排序列已按关 有序,每趟操作只需 1 次比 2 次移 。 比 次数 =n-1 次 移 次数 =2(n-1)次 最坏情况下:即第 j 趟操作,插入 需要同前面的 j 个 行 j 次关 比 ,移 的次数 j+2 次。 平均情况下:即第 j 趟操作,插入 大 同前面的 j/2 个 行关 比 , 移 的次数 j/2+2 次。 由此,直接插入排序的 复 度 O(n2)。是一个 定的排序方法 3.希 排序 (Shell’s Sort) 直接插入排序算法 ,在 n 小 ,效率比 高,在 n 很大 ,若序列按 关 基本有序,效率依然 高,其 效率可提高到 O(n)。希 排序即是从 两点出 , 出插入排序的改 方法。 希 排序方法: 一个步 序列 t1,t2,?, tk,其中 titj , tk=1; 按步 序列个数 k, 序列 行 k 趟排序; 每趟排序,根据 的步 ti ,将待排序列分割成若干 度 m 的子序列,分 各子表 行直接插入排序。 步 因子 1 ,整个序列作 一个表来 理,表 度即 整个序列的 度。 希 排序 效分析很 , 关 的比 次数与 移 次数依 于步 因子序列 的 取,特定情况下可以准确估算出关 的比 次数和 的移 次数。 目前 没有人 出 取最好的步 因子序列的方法。步 因子序列可以有各种取法, 有取奇数的,也有取质数的,但需要注意:步长因子中除 1 外没有公因子,且最后一个步长因子必须为 1。希尔排序方法是一个不稳定的排序方法。 4.冒泡排序 冒泡排序方法:对 n 个记录的表,第一趟冒泡得到一个关键码最大的记录 r[n] , 第二趟冒泡对 n-1 个记录的表, 再得到一个关键码最大的记录 r[n-1] ,如此重复, 直到 n 个记录按关键码有序的表。 【效率分析】 空间效率:仅用了一个辅助单元。 时间效率:总共要进行 n-1 趟冒泡,对 j 个记录的表进行一趟冒泡需要 j-1 次关键码比较。 移动次数: 最好情况下:待排序列已有序,不需移动。 5.快速排序 快速排序是通过比较关键码、交换记录,以某个记录为界 (该记录称为支点 ),将待排序列分成两部分。 其中,一部分所有记录的关键码大于等于支点记录的关键码,另一部分所有记录的关键码小于支点记录的关键码。 我们将待排序列按关键码以支点记录分成两部分的过程, 称为一次划分。 对各部分不断划分, 直到整个序列按关键码有序。 【效率分析】 空间效率:快速排序是递归的,每层递归调用时的指针和参数均要用栈来存放,递归调用层次数与上述二叉树的深度一致

文档评论(0)

1亿VIP精品文档

相关文档