数据结构问答9

这篇具有很好参考价值的文章主要介绍了数据结构问答9。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

排序(递增)

1. 排序算法的评价指标

答:除时间空间复杂度外。还要关注算法的稳定性:即经过排序算法关键字相同的元素在排序之后相对位置不变,则为稳定的算法。

内部排序(数据都在内存中)

插入排序

2. 直接插入排序

答:基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已排好序的子序列中,直到全部记录插入完成。

时间复杂度:O(n^2),空间复杂度:O(1),稳定性:稳定

3. 折半插入排序

答:基本思想:对直接排序算法的优化(没有质的提升),采用折半查找的方式找到插入位置,再通过移动元素进行插入。

时间复杂度:O(n^2),空间复杂度:O(1),稳定性:稳定

4. 希尔排序(Shell Sort)

答:基本思想:是一种分组插入的方法。先追求表中元素部分有序,再逐渐逼近全局有序

数据结构问答9,408复习打卡,数据结构

时间复杂度:O(n^1.3),d=1时退化为直接插入最坏O(n^2),空间复杂度:O(1),稳定性:不稳定

因为要使用增量d快速的找到相邻的从属于一个子表的元素,因此只适用于顺序表(随机存取)

交换排序

基于“交换”的排序:根据序列中两个元素关键字的比较结果来对换两个记录在序列中的位置

5. 冒泡排序

答:

算法原理:从后往前(从前往后)两两比较相邻元素的值,若为逆序,则交换,直至序列比较完。这是一趟冒泡排序。每一趟可以使一个元素移动到最终位置,之后的处理中这个元素不需要进行比较如果某一趟排序过程中未发生“交换”,则说明整个序列已有序,可提前结束算法

基本思想:通过无序区中相邻元素关键字的比较和位置交换,使关键字最小的元素如“气泡”逐渐向前“漂”。相同的元素不交换位置,保证算法稳定性。整个算法从最后面的两个元素开始,每两个相邻的关键字进行比较,使关键字小的元素置换到大的前面。依次类推,直至有序。

时间复杂度:最好O(n),最坏和平均O(n^2),空间复杂度:O(1),稳定性:稳定

这种方法也同样适用于链表。每一趟确定一个最大或最小的元素的最终位置

6. 快速排序

答:快速排序是一种高效的排序算法,采用分治的思想。它通过选择一个基准元素将待排序序列划分为左右两个部分,然后对左右两个部分分别进行递归排序。

基本思想:在待排序的n个元素中选择一个基准元素(通常选第一个),然后将序列分为左右两部分,所有关键字与基准比较,比它小的放在前半部分,比它大的放在后半部分,最后基准放在中间(此时确定了一个中间元素的最终位置)。这是一趟快排。接着分别对两半部分递归的继续划分,直到每部分只有一个或不存在元素为止。

时间复杂度:O(n*递归层数),空间复杂度:O(递归层数),稳定性:不稳定

最好时间复杂度 O(nlog2n),每一次划分都将数组分为长度相等的两半。 最坏时间复杂度O(n^2),每一次划分都将数组划分为长度为 1 和 n-1 的两半;

选择排序

每一趟在待排序元素中选取关键字最小(最大)的元素加入有序子序列。

7. 简单选择排序

答:

基本思想:每次从未排序的数据中选出最小的数据,然后将其放到已排序数据的末尾。通过不断重复这个过程,直到所有数据都排好序为止。这种方法适用于顺序表、链表。

时间复杂度:O(n^2),空间复杂度:O(1),稳定性:不稳定

8. 堆排序

答:堆排序是一种树形选择排序,特点是:在排序过程中,将顺序表看成一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系,在当前无序区中选择关键字最大(小)的元素。堆排序分为两个阶段,以使用大根堆进行升序排序为例:

建堆:将待排序序列看作是一棵完全二叉树,从最后一个分支结点开始,对每个结点进行一次调整(也就是将其与其子结点进行比较,如果不满足大根堆的性质则进行交换),直到根结点。

排序:将堆顶元素(最大元素)与堆底元素交换,然后将堆的大小减 1,然后对堆顶元素调整进行下坠(保证堆的性质)。重复执行直到堆的大小为 1。

基本思想:利用大根堆(根>左右),每次选择根下坠到最后,堆的大小-1,并调整堆保持大根堆的性质。不断重复这一过程,直到堆只剩下一个元素。小根堆(根<左右)同理

时间复杂度:建堆O(n)+排序O(nlog2n),整体为O(nlog2n)空间复杂度:O(1),稳定性:不稳定

堆中插入:新元素放表尾(堆底),根据大/小根堆的要求,新元素不断上升,直到无法继续上升

堆中删除:被删元素用表尾()元素代替,根据堆要求,替代元素不断下坠,直到无法继续下坠

归并排序

9. 归并排序

答:在内部排序中一般采用二路归并。也有多路归并,m路归并关键字对比次数为m-1次。归并排序是一种基于分治思想的排序算法。第一阶段是分治阶段,将待排序序列不断二分,直到分成单个元素,这些单个元素可以看作是已经排好序的子序列。第二阶段是合并阶段,将已经排好序的子序列两两合并成一个有序的序列,直到整个序列有序。

(二路)基本思想:将初始序列看做n长度为1的有序子序列,然后将相邻的子序列两两归并,然后把排好序的部分看做新的子序列,然后递归的进行,直到得到一个长度为n的有序序列。

将归并排序的过程表示为一棵递归树,假设待排序序列长度为 n,递归树的深度为 log₂n,每层的时间复杂度为 O(n),则归并排序的最好、最坏时间复杂度均为 O(nlog2n),空间主要来着合并数组(与原数组大小相同),比递归函数调用栈比,空间复杂度数量级更高,因此为O(n)。

时间复杂度:O(nlog2n),空间复杂度:O(n),稳定性:稳定

每一趟的有序区是局部的,在最后一趟结束前,所有元素并不一定归位了。

基数排序

是一种不基于关键字比较的排序算法,通过"分配"和"收集"过程来实现排序的

10. 基数排序

答:

基本思想:借助多关键字排序思想对但关键字排序。将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次按每一位排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。

关键字位可能取得r个值,则需要r个辅助队列;d趟“分配”和“收集”;n个数据元素

时间复杂度:O(d(n+r)),空间复杂度:O(r),稳定性:稳定

数据结构问答9,408复习打卡,数据结构

外部排序(数据太多无法全部放入内存)

11. 外部排序

数据结构问答9,408复习打卡,数据结构

12. 败者树

答:败者树可视为一颗完全二叉树多了一个最终的“胜利者”结点)。k个叶子结点分别是当前参加比较的元素,非叶子结点用来记忆左右子树中的“失败者”,而让“胜者”往上继续进行比较,一直到根结点。

解决的问题:使用多路平衡归并可减少归并趟数,K路归并构造败者树需要对比关键字K-1次,构造败者树,选出最小元素,可以使关键字对比次数减少到 log2K上取整 次

13. 置换-选择排序

数据结构问答9,408复习打卡,数据结构

14. 最佳归并树

数据结构问答9,408复习打卡,数据结构

内部排序算法比较

数据结构问答9,408复习打卡,数据结构

 文章来源地址https://www.toymoban.com/news/detail-612594.html

到了这里,关于数据结构问答9的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 408数据结构历年代码真题详解(含暴力解)

    代码全部开源,求个⭐:mancuoj/408-ds 考虑到网络环境,加一个 gitee 链接 除22年真题外已全部更新完成!题源王道,如果有错漏的地方,欢迎PR! 🍓 09~22年真题 🍒 暴力解 + 最优解 🥭 仿照王道书上的写法,含注释 🍉 GoogleTest 全面测试 🍇 真题题目 + 评分标准 评分标准 点击

    2024年02月07日
    浏览(33)
  • 【玩转408数据结构】线性表——定义和基本操作

            线性表是算法题命题的重点,该类题目实现相对容易且代码量不高,但需要最优的性能(也就是其时间复杂度以及空间复杂度最优),这样才可以获得满分。所以在考研复习中,我们需要掌握线性表的基本操作,在平时多进行代码练习。当然在考场上,我们并不一

    2024年02月19日
    浏览(48)
  • 【数据结构】【王道408】——PPT截图与思维导图

    自用视频PPT截图 视频网址王道B站链接 23考研 408新增考点: 并查集,红黑树 2023年408真题数据结构篇 408考纲解读 考纲变化 希尔排序 冒泡排序 快速排序 简单排序算法 堆排序

    2024年02月15日
    浏览(34)
  • 【数据结构入门精讲 | 第九篇】考研408排序算法专项练习(一)

    前面几篇文章介绍的是排序算法,现在让我们开始排序算法的专项练习。 1.希尔排序是稳定的算法。(错) 解析:稳定性是指如果两个元素在排序前后的相对顺序保持不变,那么这个排序算法就是稳定的。对于具有相同的元素,排序后它们的相对位置应该保持不变。

    2024年02月03日
    浏览(50)
  • 【玩转408数据结构】线性表——线性表的顺序表示(顺序表)

            通过前文,我们了解到线性表是具有相同数据类型的有限个数据元素序列;并且,线性表只是一种逻辑结构,其不同存储形式所展现出的也略有不同,那么今天我们来了解一下线性表的顺序存储——顺序表。         顺序表指的是将 逻辑上相邻的元素 存储在 物理位

    2024年02月19日
    浏览(52)
  • 计算机保研面试常见问题(408数据结构简答题)

    1. 什么是时间复杂度?O(n)的O代表了什么? 答:时间复杂度是指执行算法所需要的计算工作量,可以用于描述一个程序的规模。O(n)中的O表示的是最坏情况下的时间复杂度。 2. 时间复杂度的量级排序是什么? 答:O(logn) O(n) O(nlogn) O(n^2) O(2^n) O(n!) 3. 顺

    2024年02月13日
    浏览(61)
  • 【23考研】计算机408数据结构代码题强化阶段划重点(王道书)

    视频链接:【23考研】10分钟带你整理408数据结构强化阶段代码题复习重点 本篇只适合考408的同学,请自主命题的同学自觉右上角×掉 因为王道书为了照顾自主命题的同学,所以很多算法也给出了代码实现,实际上对于考408的同学,很多代码是不需要掌握的,毕竟408的代码题没

    2024年02月15日
    浏览(49)
  • 数据结构问答9

    1. 排序算法的评价指标 答:除时间空间复杂度外。还要关注算法的稳定性:即经过排序算法相同的元素在排序之后 相对位置不变, 则为稳定的算法。 2. 直接插入排序 答:基本思想:每次将一个待排序的记录,按其大小插入到前面已排好序的子序列中,直到全

    2024年02月15日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包