王道C语言督学营OJ课后习题(课时17)

#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
typedef int ElemType;
typedef struct {ElemType *elem;int TableLen;
}SSTable;
void Init_ST(SSTable &ST,int len)//申请空间,并进行随机数生成
{ST.TableLen=len;ST.elem=(ElemType*) malloc(sizeof (ElemType)*ST.TableLen);srand(time(NULL));for (int i = 0; i < ST.TableLen; ++i) {ST.elem[i]=rand()%100;}
}
void Print_ST(SSTable ST)
{for (int i = 0; i < ST.TableLen; ++i) {printf("%3d",ST.elem[i]);}printf("\n");
}
void swap(ElemType &a,ElemType &b)
{ElemType temp;temp=a;a=b;b=temp;
}
void SelectSort(ElemType *A,int n)
{int i,j,min;//min是用来记录每一趟最小元素的下标for(i=0;i<n-1;i++){min=i;for(j=i+1;j<n;j++){if(A[j]<A[min])min=j;}if(i!=min){swap(A[i],A[min]);}}
}
void AdjustDown(ElemType A[],int k,int len)
{int dad=k;int son=2*dad+1;//左孩子下标while (son<=len){if(son+1<=len && A[son]<A[son+1])//看下有没有右孩子,比较左右孩子选大的{son++;}if(A[son]>A[dad])//比较孩子和父亲,如果孩子大于父亲,那么进行交换{swap(A[son],A[dad]);dad=son;//孩子重新作为父亲,判断下一颗子树是否符合大根堆son=2*dad+1;} else{break;}}
}
void HeapSort(ElemType A[],int len)
{int i;//建立大根堆for(i=len/2;i>=0;i--){AdjustDown(A,i,len);}swap(A[0],A[len]);//交换顶部和数组最后一个元素//下面的策略就是,不但调整剩余元素为大根堆,因为根部最大,所以再次与A[i]交换(相当于放到数组后面),循环往复for(i=len-1;i>0;i--){AdjustDown(A,0,i);//剩下元素调整为大根堆swap(A[0],A[i]);}
}
int main() {SSTable  ST;ST.TableLen=10;ST.elem=(ElemType*) malloc(sizeof (ElemType)*ST.TableLen);for (int i = 0; i < ST.TableLen; ++i) {scanf("%d",&ST.elem[i]);}SelectSort(ST.elem,10);Print_ST(ST);HeapSort(ST.elem,10);Print_ST(ST);return 0;
}

 

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef int ElemType;
void Merge(ElemType A[],int low,int mid,int high)
{static ElemType B[N];//加static的目的是无论多次递归,都只有一个B[N]int i,j,k;for(k=low;k<=high;k++)//复制元素到B中B[k]=A[k];//合并数组for(i=low,j=mid+1,k=i;i<=mid&&j<=high;k++){if(B[i]<=B[j])A[k]=B[i++];elseA[k]=B[j++];}while (i<=mid)//如果有剩余元素,接着放入即可A[k++]=B[i++];//前一半有剩余的放入while (j<=high)//如果有剩余元素,接着放入即可A[k++]=B[j++];//后一半有剩余的放入
}
void MergeSort(ElemType A[],int low,int high)//递归分割
{if(low<high){int mid=(low+high)/2;MergeSort(A,low,mid);//排序好前一半MergeSort(A,mid+1,high);//排序好后一半Merge(A,low,mid,high);//将连个排序好的数组合并}}
void print(int *a)
{for (int i = 0; i < N; ++i) {printf("%3d",a[i]);}printf("\n");
}
int main() {int A[10]={12,63,58,95,41,35,65,0,38,44};MergeSort(A,0,9);print(A);return 0;
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/615822.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

研发岗-面临统信UOS系统配置总结

第一步 获取root权限 配置环境等都需要用到root权限&#xff0c;所以我们先获取到root权限&#xff0c;方便下面的操作 下载软件 在UOS应用商店下载的所需应用 版本都比较低 安装node 官网下载了【arm64】的包&#xff0c;解压到指定文件夹&#xff0c;设置链接&#xff0…

前端css笔记(pink老师)

css css书写顺序 自适应屏幕 html { width: 100%; height: 100%; display: table; } body { display: table-cell; } 用了这个方法以后&#xff0c;如果希望页面内的盒子也适应屏幕大小&#xff0c;则使用以下方法&#xff0c;会根据父亲的宽高计算出该盒子的宽高 width:xx%; …

蓝桥杯物联网竞赛_STM32L071KBU6_全部工程及国赛省赛真题及代码

包含stm32L071kbu6全部实验工程、源码、原理图、官方提供参考代码及国、省赛真题及代码 链接&#xff1a;https://pan.baidu.com/s/1pXnsMHE0t4RLCeluFhFpAg?pwdq497 提取码&#xff1a;q497

LeetCode700:验证二叉搜索树

题目描述 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树 只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 代码 使用中序…

【系统分析师】操作系统部分

文章目录 1、进程状态2、前趋图3、PV操作4、死锁问题5、存储管理5.1 页式存储5.2 段式存储5.3 段页式存储5.4 页面置换算法 6、文件管理6.1 索引文件结构6.2 空闲存储空间管理 7、设备管理7.1数据传输控制7.2 虚设备和SPOOLING技术7.3 微内核操作系统7.4 嵌入式操作系统 说明&a…

安装ODBC方法

1、运行 搜索 ODBC数据源管理程序 32位或者 64位 2、在用户DSN或者系统DSN选择添加&#xff08;建议前者&#xff09;&#xff0c;此处以添加access数据库的odbc驱动为例 3、安装成功

Mac的终端配置

Mac的终端配置 参考教程包管理工具 - Homebrew出现的问题用虚拟环境解决方案&#xff1a;直接将解释器的路径放过去错误方法&#xff1a;用find查找到虚拟环境安装的路径&#xff0c;其链接的是brew安装的python路径 编辑器没有报错&#xff0c;但是运行过程中仍然找不到pandas…

2024年广东省网络系统管理样题第1套网络搭建部分

2024年广东省职业院校技能大赛样题1 极安云科专注职业教育技能竞赛培训4年&#xff0c;包含信息安全管理与评估、网络系统管理、网络搭建等多个赛项及各大CTF模块培训学习服务。本团队基于赛项知识点&#xff0c;提供完整全面的系统性理论教学与技能培训&#xff0c;成立至今持…

2024 Guitar Pro 8.1.2-27 (x64) win/mac中文激活版破解版

吉他爱好者必备神器&#xff1a;Guitar Pro v8.1.1 Build 17深度解析 随着数字音乐制作和学习的日益普及&#xff0c;越来越多的吉他爱好者开始寻找能够帮助他们提升技能、创作音乐的专业工具。在众多吉他制作软件中&#xff0c;Guitar Pro因其强大的功能和易用的界面备受推崇…

【笔记】mysql版本6以上时区问题

前言 最近在项目中发现数据库某个表的createTime字段的时间比中国时间少了13个小时&#xff0c;只是在数据库中查看显示时间不对&#xff0c;但是在页面&#xff0c;又是正常显示中国时区的时间。 排查 项目中数据库的驱动使用的是8.0.19&#xff0c;驱动类使用的是com.mysq…

4月全新热文高科技,套用模板一键生成热文,没脑子拷贝,第二天出盈利

撰写热门文章&#xff0c;如今日头条或微信公众号文章&#xff0c;通常需要多长时间呢&#xff1f;从构思主题、搜集资料&#xff0c;到撰写成文&#xff0c;整个过程至少需要1小时&#xff0c;有时甚至可能需要2小时。 项目 地 址&#xff1a;laoa1.cn/1627.html 现在&…

位像素海外仓管理系统对接ERP系统教程,一对一教学

在海外仓管理过程中&#xff0c;对接ERP系统的重要性不言而喻的。这种对接不仅能让数据实时共享&#xff0c;还能让海外仓管理者优化整个供应链管理流程。 因此&#xff0c;今天小编就来教大家&#xff0c;海外仓仓库系统是怎么对接ERP物流系统的&#xff1f; 1.分析需求 在对接…