第十章作业题目10.1 10.3 10.4 10.6 10.12 10.23 10.27 10.29 10.31 10.32 10.42 10.43。作业提交入口已开通,截止日期6月13日
https://wenku.baidu.com/view/4feba71baa956bec0975f46527d3240c8447a13d.html
https://blog.csdn.net/weixin_30699955/article/details/95661878
http://www.doc88.com/p-8059220558076.html
十大排序 https://www.runoob.com/w3cnote/ten-sorting-algorithm.html

1

答案的 https://blog.csdn.net/qq_45846199/article/details/110442703
总:https://blog.csdn.net/xiaoxiaojie12321/article/details/81380834
https://www.runoob.com/w3cnote/radix-sort.html
快速排序 https://www.runoob.com/w3cnote/quick-sort.html
堆排序 https://www.cnblogs.com/chengxiao/p/6129630.html

3 算法稳定性

https://zhidao.baidu.com/question/525229984242427805.html
https://blog.csdn.net/qq_43152052/article/details/100078825
10.3❷试问在10.1题所列各种排序方法中,哪些是稳定的?哪些是不稳定的?并为每一种不稳定的排序方法举出一个不稳定的实例。
1.快速排序 比如序列为 5 3 3 4 3 8 9 10 11, 现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱
2.希尔排序 由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元 素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱
3.堆排序 堆的结构是节点i的孩子为2i和2i+1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点。在一个长为n 的序列,堆排序的过程是从第n/2开始和其子节点共3个值选择最大(大顶堆)或者最小(小顶堆),这3个元素之间的选择当然不会破坏稳定性。但当为n /2-1, n/2-2, …1这些个父节点选择元素时,就会破坏稳定性。有可能第n/2个父节点交换把后面一个元素交换过去了,而第n/2-1个父节点把后面一个相同的元素没 有交换,那么这2个相同的元素之间的稳定性就被破坏了。所以,堆排序不是稳定的排序算法。

4


(1)n-1
(2)1+2+…+n-1=

6 和29 奇偶交换

https://blog.csdn.net/shuiyixin/article/details/85252224
https://blog.csdn.net/lemon_tree12138/article/details/50605563

(1)当奇数交换和偶数交换都没有发生交换的时候就结束了
(2)2;n+2

#include <stdio.h>
#include <stdlib.h>void Sort(int a[], int l)
{int temp;int i, j;int m = 1, n = 1;//如果奇排序过程中有元素交换,m为1,否则为0;如果偶排序过程中有元素交换,n为1,否则为0。//当mn同时为0时,说明奇偶都没有交换,这个时候说明数据有序。while (m || n){for (i = 1; i < l - 1; i=i+2){if (a[i] > a[i + 1]){temp = a[i];a[i] = a[i + 1];a[i + 1] = temp;m = 1;}elsem = 0;}for (j = 0; j < l - 1; j = j + 2){if (a[j] > a[j + 1]){temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;n = 1;}elsen = 0;}}
}

12 堆


(2)12,24,33,29,33,56,48, 65, 86, 70
(4) 05,28,20,23,40,38,29,61,35,76,56,100 交换3次

23 直接插入

http://www.aikanwk.com/tiku/1710.html
10.23❷试以L.r[k+1]作为监视哨改写教科书10.2.1节中给出的直接插入排序算法。其中,L.r[1…k]为待排序记录且k<MAXSIZE。

void InsertSort(SqList& L)
{int k = L.length;int i, j;for (i = k - 1; i > 0; i--){if (L.r[i].key > L.r[i + 1].key){L.r[k + 1] = L.r[i];  // 复制为监视哨for (j = i + 1; L.r[k + 1].key > L.r[j].key, j <= k; j++)//防止越界L.r[j - 1] = L.r[j];//记录往前移}}}

27 双向冒泡

https://wenku.baidu.com/view/4cd655b465ce0508763213b7.html
编写一个双向起泡的排序算法,即相邻两遍向相反方向起泡。

#include <stdio.h>
#include <stdlib.h>void BiBubble(int r[], int n)
{int flag, i=0, j, temp;flag = 1;//printf("%d ", flag);while (flag == 1){flag = 0;for(j=n-i-1;j>i;j--)//逆序冒泡,找最小if (r[j - 1] > r[j]){flag = 1;temp = r[j];r[j] = r[j - 1];r[j - 1] = temp;}for (j = i; j < n - i-1; j++)//正序冒泡,找最大if (r[j] > r[j + 1]){flag = 1;flag = 1;temp = r[j];r[j] = r[j + 1];r[j + 1] = temp;}i++;    }
}int main()
{int a[10];int i, j;for (i = 0, j = 10; i < 10; i++, j--)a[i] = j;BiBubble(a, 10);for (i = 0; i < 10; i++)printf("%d ", a[i]);
}

29 奇偶交换排序

按10.6题所述编写奇偶交换排序的算法。

31

https://blog.csdn.net/happy_bigqiang/article/details/53364141?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control

#include <stdio.h>
#include <stdlib.h>
#define max 10
typedef struct
{int key;//...
}RedType;typedef struct
{RedType r[max];// r[0]用作哨兵单元int length;
}SqList;void ti_31(SqList& L)
{int i = 0, j = L.length;while (i != j){while (i < j && L.r[i].key < 0)i++;if (i < j)L.r[0] = L.r[i];while (i < j && L.r[j].key >= 0)j--;if (i < j){L.r[i++] = L.r[j];L.r[j] = L.r[0];}}
}int main()
{SqList l;l.length = 3;l.r[1].key = 3;l.r[2].key = -2;l.r[3].key = -9;ti_31(l);for (int i = 1; i < 4; i++)printf("%d ", l.r[i].key);
}

当关键字为正数的记录全部排在关键字为负数的记录之前时,需要移动的次数达到最大: n/2.

32 红旗问题

https://blog.csdn.net/qq_42191317/article/details/102779113?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242
荷兰国旗问题:设有一个仅由红、白、蓝三种颜色的条块组成的条块序列。请编写一个时间复杂度为O(n)的算法,使得这些条块按红、白、蓝的顺序排好,即排成荷兰国旗图案。

#include <stdio.h>
#include <stdlib.h>
#define max 10
enum color{red,white,blue};
typedef struct
{int c[max];int length;
}FlagList;void swap(int a[], int i, int j)
{int temp = a[i];a[i] = a[j];a[j] = temp;
}void HFlag(FlagList& l)
{int i, j, k;int ll = l.length;for (i = 0, j = 0; j < ll;){k = l.c[j];if (k == 0){swap(l.c, i, j);i++;j++;}else if (k == 1)j++;else if (k == 3){swap(l.c, j, ll-1);ll--;}}
}int main()
{int a[10];int i, j;for (i = 0, j = 10; i < 10; i++, j--)a[i] = j;FlagList l;l.c[8];//不能赋初值,因为还有个key
}

42 中值记录

序列的“中值记录”指的是:如果将此序列排序后,它是第┌n/2┐个记录。试写一个求中值记录的算法。

#include <stdio.h>
#include <stdlib.h>
#define max 10
typedef struct
{int key;//...
}RedType;typedef struct
{RedType r[max + 1];// r[0]闲置或用作哨兵单元int length;
}SqList;int MidElement(SqList& L)
{int i, j, k, n;RedType temp;if (L.length == 0)return 0;for (i = 1; i < L.length; i++)//排序{k = i;temp = L.r[i];for(j=i+1;j<=L.length;j++)if (temp.key > L.r[j].key){temp = L.r[j];k = j;}temp = L.r[i];L.r[i] = L.r[k];L.r[k] = temp;}if (L.length % 2 == 0)//找中值n = L.length / 2;elsen = L.length / 2 + 1;return L.r[n].key;
}

43 ?

已知记录序列a[1…n]中的关键字各不相同,可按如下所述实现计数排序:另设数组c[1…n],对每个记录a[i],统计序列中关键字比它小的记录个数存于c[i],则c[i]=0的记录必为关键字最小的记录,然后依c[i]值的大小对a中记录进行重新排列,试编写算法实现上述排序方法。

#include <stdio.h>
#include <stdlib.h>
#define max 10
typedef struct
{int key;//...
}RedType;typedef struct
{RedType r[max + 1];// r[0]闲置或用作哨兵单元int length;
}SqList;void sort_43(SqList& L)
{int i, j;SqList t;int c[max];t = L;for (i = 1; i <= t.length; i++) //初始化c[]c[i] = 0;for (i = 1; i < t.length - 1; i++)//对每个记录统计比它小的关键字个数{for (j = i + 1; j <= t.length; j++){if (t.r[i].key < t.r[j].key)c[j]++;elsec[i]++;}}for (i = 1; i < t.length + 1; i++)//排序L.r[c[i] + 1] = t.r[i];
}

严蔚敏数据结构习题第十章相关推荐

  1. 严蔚敏数据结构习题第六章

    https://www.cnblogs.com/kangjianwei101/p/5243404.html 目录 36-47 二叉树 6.3,6.5,6.6,6.10,6.13,6.14,6.19,6 ...

  2. 严蔚敏数据结构习题第九章

    l第九章查找作业题目9.9 9.14 9.19 9.25 9.31 9.33,平台提交入口已开通,截止日期6月20日 https://www.cnblogs.com/kangjianwei101/p/ ...

  3. 严蔚敏数据结构源码及习题解析

    ⭐ 我的网站: www.mengyingjie.com ⭐ 严蔚敏数据结构源码及习题解析 习题解析未更新完整,以后更新 内容已上传到github,欢迎star和fork: https://github ...

  4. KMP算法-严蔚敏数据结构

    KMP 算法是 D.E.Knuth.J,H,Morris 和 V.R.Pratt 三位神人共同提出的,称之为 Knuth-Morria-Pratt 算法,简称 KMP 算法.该算法相对于 Brute- ...

  5. 严蔚敏数据结构C语言版——线性表的链式存储方式详细代码

    一.严蔚敏数据结构C语言版 由于书上的许多地方都是伪代码,所以下面的代码对课本上的做了一些改动,使代码能够正常运行 链表的定义即相关类型定义 typedef int ElementType; type ...

  6. 考研961数据结构c语言版真题,严蔚敏数据结构C语言版考研真题库

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 严蔚敏<数据结构>(C语言版)配套题库[考研真题精选(部分视频讲解)+章节题库] 下载来源:http://fangcai.100xuexi.c ...

  7. 严蔚敏数据结构c++版微盘_数据结构复习知识点总结

    <数据结构>重点在线性表.树.图.查找和排序.参考书目是<数据结构>(C语言版)严蔚敏.吴伟民编著.通过对线性表.队列.栈和数组的了解,进一步理解其含义,熟悉各种例如进栈.出栈 ...

  8. 2021-10-16【严蔚敏数据结构代码实现合集】【c语言学习必备】

    本文记录了我为期三个月<算法与数据结构>的学习历程,仅作为记录自己学习状态的文章. 线性表 2021-9-14[数据结构/严蔚敏][顺序表][代码实现算法2.1-2.7] 2021-9-1 ...

  9. IT女神节(致敬中国IT界永远的女神严蔚敏-数据结构)

    我们都知道程序=数据结构+算法.相信很多人都学过严蔚敏的数据结构的课程.作为一个码农,在这不管是3.7女神节,还是3.8妇女节.我觉得都有必要向这些教育界的老前辈致敬.今天我就梳理梳理,最经典的数据结 ...

  10. 数据结构(C语言版第二版)严蔚敏 课后习题答案

    https://blog.csdn.net/Bamboo_shui/article/details/72433523 期末复习看了很多博客来确定自己的课后答案,大同小异,很多博客转载的都是上面这位大佬 ...

最新文章

  1. 谈谈Backlog梳理活动
  2. 【深度】清华黄高等人新作:动态神经网络首篇综述
  3. git的author和commiter的修改
  4. 可在广域网部署运行的QQ高仿版 -- GG叽叽(开源)
  5. ASP.NET中使用Cache类来缓存页面的信息
  6. linux环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
  7. [云炬python3玩转机器学习笔记] 3-8Numpy中的聚合运算
  8. c语言向自定数组_C语言一维数组的定义和引用
  9. 把windows键盘作为xfce环境中的打开Applications
  10. python二值化 感兴趣区域_Python+OpenCV感兴趣区域ROI提取方法
  11. 易点云在京发布璇玑调度系统 中小企业办公IT升级步伐加快
  12. 自动爬取中国大学mooc的pdf文档
  13. 为资产分类定义折旧范围_SAP折旧范围概念
  14. Socket Programming
  15. 关于内存条的知识要点⑴
  16. 瞬态抑制二极管(Tvs)和快恢复/超快恢复二极管的学习
  17. Android Verified Boot dm-verity 优化和实战2
  18. 通过搭建web服务来实现页面访问
  19. Java实现QQ邮件发送
  20. 将 Amazon EC2 到 Amazon S3 的数据传输推向100Gbps线速

热门文章

  1. 计算机等级考试--二级Java的知识点大全
  2. 凸包算法 Matlab实现
  3. 火山软件开发访问网页查找电话号和读写文件应用
  4. mysql版本升级对数据的影响_MySQL升级
  5. NSString Unicode
  6. 换协议、改代码,Elastic要逼开发者二选一?
  7. Android+按键精灵代码,安卓按键精灵怎么编写脚本 编写脚本教程
  8. 2012.3.27《JAVA程序设计教程》
  9. matlab555定时器,数字电子时钟课程设计报告-电工
  10. JavaScript的一些名词(持续更新中-取自javaScript高级程序设计)