vc++内部排序算法比较,排序的六种算法之希尔排序,快速排序,堆排序,堆排序.冒泡泡排序

news/2024/11/19 3:11:56/

 各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。
2.2基本要求:
(1)    对以下6种常用的内部排序算法进行对比:直接插入排序;希尔排序;起泡排序;快速排序;简单选择排序;堆排序;
(2)    待排序表的表长不少于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;对比的指标为关键字比较次数和关键字移动次数(1次关键字交换计为3次移动)。
(3)    测试数据由随机函数产生。

2.3概要设计
2.3.1核心程序:排序的六种算法
1)希尔排序:将整个待排序列分割成若干个子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。
Void ShellSort(SortData* sd, int dlta[], int t,int* CmpNum, int* ChgNum)  
操作结果:对待排序列进行插入和希尔排序。
2)快速排序:通过一趟排序将记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
void  QSort (SortData* sd, int low, int high, int* CmpNum, int* ChgNum)
操作结果:对待排序列进行快速排序。

3)堆排序:是记录序列按关键字非递减有序排列,则在堆排序的算法中先建一个“大顶堆”,技先选得一个关键字最大得为最大的记录并与序列中最后一个记录交换,然后对序列中前n-1个记录进行筛选,重新将它调整为一个“大顶堆”,如此反复,知道排序结束。
void  HeapAdjust (SortData* sd,int s, int m, int* CmpNum, int* ChgNum)
操作结果:对待排序列进行堆排序。
4)冒泡泡排序:第i趟起泡排序是从L.r[1]到L.r[n-i+1]依次比较相邻两个记录的关键字,并在“逆序”时交换相邻记录,其结果是在n-i+1个记录中关键字最大的记录被交换到第n-i+1的位置上,整个排序过程需进行k(1<=k<n)趟起泡排序,判别起泡排序结束的条件应该是 “在一趟排序过程中没有进行过交换记录的操作”。
void BubbleSort(SortData* sd, int* CmpNum, int* ChgNum)
操作结果:对待排序列进行一趟冒泡排序。
5)简单选择排序:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和的i(1<=i<n)个记录交换之,如此重复,直到排序结束。
void  SelSort(SortData* sd, int* CmpNum, int* ChgNum)
操作结果:对待排序列进行选择排序。
2.3.2一些初始化函数如下:
void  RandomNum(BOOL boolen)  操作结果:生成排序列。
void InitSortData(SortData*sd,BOOL boolen)操作结果:初始化L,当boolen=TRUE生成,boolen=FALSE生成随机排序列。
void RandomizeSortData(SortData* sd,int d )  
操作结果:随d的值不同程度打乱排序表。
void RecallSortData(SortData* sd)     操作结果:随机数列复位。
2.3.3七大模块的函数:
void InsertSort( )  //调用插入排序并输出数据
void ShellSort( )  //调用希尔排序并输出结果
void QuickSort( )  //调用快速排序并输出结果
void HeapSort( )  //调用堆排序并输出结果
void BubbleSort( )  //调用一趟冒泡排序并输出结果
void SelectSort( )  //调用选择排序并输出结果
2.4详细设计
2.4.1 插入排序
void InsertSort()   
{      
    int CmpNum,ChgNum,TempTime,SpendTime;   
    int i;   
    int Indata[1]={1};    //插入排序是希尔排序的特例   
    SortData  sd;   
    InitSortData(&sd,TRUE);      
    Display(&sd);   
    printf("插入排序:\n\n");          
    printf("测试\t比较次数\t\t交换次数\t时间\n");   
    for(i=0;i<9;i++)   
 


http://www.ppmy.cn/news/75794.html

相关文章

Git常用命令clone和init和add

Git常用命令clone和init和add 1、clone 拷贝一个 Git 仓库到本地。 # 下载一个项目和它的整个代码历史 # 该命令可用于通过指定的URL获取一个代码库 $ git clone repository_url# 创建一个本地仓库的克隆版本 # 使用本地的一个仓库来创建一个仓库 $ git clone /path/to/repo…

小黑子—Java从入门到入土过程:第十一章 - 网络编程、反射及动态代理

Java零基础入门11.0 网络编程1. 初识网络编程2. 网络编程三要素3.IP三要素3.1 IPV4的细节3.1.1特殊的IP地址3.1.2 常用的CMD命令 3.2 InetAddress 的使用3.3 端口号3.4 协议3.4.1 UDP协议3.4.1 - I UDP 发送数据3.4.1 - II UDP 接收数据3.4.1 - III UDP 练习&#xff08;聊天室…

智能排班系统 【数据库设计】

文章目录 数据库设计规范ER图物理模型数据表登录日志表操作日志表菜单表角色表企业表门店表省市区表门店节日表消息表职位表排班规则表排班任务表排班结果存储scheduling_date排班日表scheduling_shift排班班次表shift_user班次员工中间表 定时通知表用户表中间表role_menu角色…

Python对Excel文件多表对多表之间的匹配(两种不同表头)——之json版

首先Excel文件多表对多表之间的匹配(VLOOKUP),有多种办法&#xff0c; 1&#xff1a;将Excel文件导入Mysql或其他数据库,然后将两种表合并成一张表&#xff0c;接着用数据库匹配 2&#xff1a;将两种表内容&#xff0c;复制粘贴到一起&#xff0c;各自分别保存成一张表&#xf…

项目实战(cloud)--配置中心Config(码云来做一个配置中心)

服务的拆分原则&#xff1a; 单体应用向微服的一个改造&#xff1a; 搭建一个聚合项目 创建一个maven项目 父项目 pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"…

月薪从10k到30k,一个普通测试工程师的3年涨薪之路...

“要涨薪&#xff0c;先跳槽”各个行业都存在这一共识&#xff0c;但是任何行业也都没有像程序员这样更为适用且好用的了。 前不久&#xff0c;就有网友分享了自己作为一个普通的自动化测试工程师的三年真实涨薪经历。但看看这个三年涨薪之路&#xff0c;好像并不普通啊&#…

数据链路层:Ethernet以太网协议

首先Ethernet、IEEE802.3、PPP和HDLC都是数据链路层的协议&#xff0c;只不过后面三个不常用而已。Ethernet和IEEE802.3属于以太链路层协议&#xff0c;数据链路层最常用的协议是Etnernet以太网协议。 定义&#xff1a; Ethernet以太网协议&#xff0c;用于实现链路层的数据传…

Mybatisplus真实高效批量插入附容错机制

文章目录 概要优化技术细节小结 概要 提示&#xff1a;mybatisplus自带真实批量插入 在mybatisplus已知常用批量插入为继承Iservice里的saveBatch方法和saveOrUpdateBatch方法&#xff0c; 进入源码可知&#xff0c;此两种方法的插入均为单条插入,如图: 其中可看出&#xff0…