十种排序算法(1) - 准备测试函数和工具

1.准备工作

我们先写一堆工具,后续要用,不然这些写在代码里可读性巨差

#pragma once
#include<stdio.h>//为C语言定义bool类型
typedef int bool;
#define false 0
#define true 1//用于交互a和b
inline void swap(int* a, int* b)
{/*int c = *a;*a = *b;*b = c;*/*a ^= *b;*b ^= *a;*a ^= *b;
}
//在ab之中取最小值
inline int min(int a, int b)
{return a < b ? a : b;
}
//在ab之中取最大值
inline int max(int a, int b)
{return a < b ? b : a;
}//检查越界异常,在编写排序算法时,容易出现下标越界,以此作为检查手段
inline int inRange(int x, int min, int max)
{int res = x >= min && x <= max;if (!res) printf("越界:%d  界限:[%d,%d]\n", x, min, max);return res;
}
//用于int的高效指数计算
inline int intpow(int a, int b)
{int r = 1;for (int i = 0; i < b; i++) r *= a;return r;
}//取得一个数在十进制下的位数
inline int getbitCount(int c)
{int bc = 0;do{bc++;} while (c = c / 10);return bc;
}//获取x的第c位
inline int getbit(int x, int c)
{// v = (x % 100) / 10^c-1return (x % intpow(10, c)) / intpow(10, c - 1);
}

测试函数

我们在sort函数里给出排序算法的实现

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>
#include<time.h>
#include<malloc.h>
#include<string.h>
#include "sort.h"//检查数组有序性
bool checkArraySort(int* nums, int numsSize, bool* upper)
{int resultA = true;for (int i = 0; i < numsSize - 1; i++){if (nums[i] > nums[i + 1]){//printf("无序数对下标:[%d,%d]\n", i, i + 1);resultA = false;}}if (resultA){*upper = true;return resultA;}int resultB = true;for (int i = 0; i < numsSize - 1; i++){if (nums[i] < nums[i + 1]){resultB = false;}}if (resultB){*upper = false;return resultB;}return false;
}
//输出数组元素
void printElements(int* nums, int count)
{for (int i = 0; i < count; i++){printf("%d", nums[i]);if (i < count - 1) printf(",");}printf("\n");
}
//随机生成数组
void randomArray(int* nums, int numsSize, int min, int max)
{srand(time(0));for (int i = 0; i < numsSize; i++){nums[i] = rand() % max - min + 1 + min;//printf("%d,", nums[i]);}}
int sort(int* arr, int size)
{quickSort(arr, size);
}int main()
{//常量:测试数据大小,随机最小值,随机最大值const int size = 10000;const int min = 0;const int max = 10000;//预分配测试数据,临时空间数组,随机备份数组int* arr = malloc(sizeof(int) * size);int* tempArr = malloc(sizeof(int) * size);int* copy = malloc(sizeof(int) * size);randomArray(arr, size, min, max);memcpy(copy, arr, sizeof(int) * size);//计时器clock_t start, end;start = clock();//排序sort(arr,size);end = clock();end -= start;bool upper;//测试数据有序性检查bool res = checkArraySort(arr, size, &upper);//输出排序报告printf("========排序测试报告========\n");printf("元素数量:%d\n", size);printf("排序后有序检查(%s):%d\n", upper ? "升序" : "降序", res);printf("排序耗时(tick):%d\n", (int)end);printf("排序耗时(ms):%f\n", (double)(end * 1000) / CLOCKS_PER_SEC);printf("排序耗时(s):%f\n", (double)end / CLOCKS_PER_SEC);printf("\n是否打印排序前后元素(IO操作可能产生较大的耗时)(Y/N)?\n");char option;int inputC = scanf("%c", &option);if (option == 'Y' || option == 'y'){printf("\n排序前:");printElements(copy, size);printf("排序后:");printElements(arr, size);}
}

在第一篇中,我们首先做这些内容,接下来我们就能心无旁骛的编写排序函数了。
下文的链接如果写完会继续贴在这里(代码写完了,原理还没写)
传送门:十种排序算法(1) xxx

在这里插入图片描述

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

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

相关文章

机器人入门(四)—— 创建你的第一个虚拟小车

机器人入门&#xff08;四&#xff09;—— 创建你的第一个虚拟小车 一、小车建立过程1.1 dd_robot.urdf —— 建立身体1.2 dd_robot2.urdf —— 添加轮子1.3 dd_robot3.urdf —— 添加万向轮1.4 dd_robot4.urdf —— 添加颜色1.5 dd_robot5.urdf —— 添加碰撞检测(Collision …

在pycharm中,远程操作服务器上的jupyter notebook

一、使用场景 现在我们有两台电脑&#xff0c;一台是拥有高算力的服务器&#xff0c;另一台是普通的轻薄笔记本电脑。如何在服务器上运行jupyter notebook&#xff0c;同时映射到笔记本电脑上的pycharm客户端中进行操作呢&#xff1f; 二、软件 pycharm专业版&#xff0c;jupy…

打造美团外卖新体验,HarmonyOS SDK持续赋能开发者共赢鸿蒙生态

从今年8月起&#xff0c;所有升级到HarmonyOS 4的手机用户在美团外卖下单后&#xff0c;可通过屏幕上的一个“小窗口”&#xff0c;随时追踪到“出餐、取餐、送达”等订单状态。这个能让用户实时获悉订单进度的神奇“小窗口”&#xff0c;就是实况窗功能。 实况窗&#xff1a;简…

java版直播商城平台规划及常见的营销模式 电商源码/小程序/三级分销+商城免费搭建

涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

843. n-皇后问题

文章目录 QuestionIdeasCode Question n− 皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n &#xff0c;请你输出所有的满足条件的棋子摆法。 输入格…

心理咨询预约小程序

随着微信小程序的日益普及&#xff0c;越来越多的人开始关注如何利用小程序来提供便捷的服务。对于心理咨询行业来说&#xff0c;搭建一个心理咨询预约小程序可以大大提高服务的效率和用户体验。本文以乔拓云平台为例&#xff0c;详细介绍如何轻松搭建一个心理咨询预约小程序。…

辅助驾驶功能开发-功能规范篇(22)-6-L2级辅助驾驶方案功能规范

1.3.6 ELK 系统功能定义 ELK全称Emergency Lane Keeping,即紧急车道保持。当车辆与道路边界护栏(包含隔离带护栏、路锥、水马) 有碰撞危险或当车辆正偏出道路边沿且存在“对向来车”或“后向来车”与本车有碰撞风险时,通过给与转向反力矩进行车辆横向运动介入控制,避免或减…

态路小课堂丨如何为QSFP-DD800G光模块选择合适的光纤跳线

TARLUZ态路 在之前2篇文章中&#xff0c;我们介绍了关于800G光模块的封装、光口类型等内容。本文态路通信将为您介绍“如何为QSFP-DD800G光模块选择合适的光纤跳线”。方便您在800G数据中心网络互连场景中快速完成链路布线。 文章1&#xff1a; 三款800G光模块方案介绍—SR8/…

【AIFEM案例操作】水泵强度分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件&#xff0c;助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题&#xff0c;软件提供高效的前后处理工具和高精度的有限元求解器&#xff0c;帮助用户快速、深入地评估结构的力学性能&#xff0c;加速产…

写博客的模板

本人详解 作者&#xff1a;王文峰&#xff0c;参加过 CSDN 2020年度博客之星&#xff0c;《Java王大师王天师》作者 公众号&#xff1a;山峯草堂&#xff0c;非技术多篇文章&#xff0c;专注于天道酬勤的 Java 开发问题、中国国学、传统文化和代码爱好者的程序人生&#xff0c;…

总感觉戴助听器耳朵又闷又堵怎么办?

随着助听器技术的进步发展&#xff0c;这些问题都有了一定程度的改善。例如&#xff0c;现在的助听器变得越来越小巧&#xff0c;外形更加美观和隐蔽&#xff1b;各种降噪技术和验配技巧也提升了助听器的音质和清晰度。 但是&#xff0c;还有一个问题困扰着很多助听器用户&…

linux的使用学习(1)

Linux 修改root密码 1.以 root 用户或具有 sudo 权限的登录到 Linux 系统。 2.打终端&#xff0c;并执行以下命令以更改 root 用户的密码&#xff1a; sudo passwd root 3.然后&#xff0c;系统会要求你输入新的 root 密码。请注意&#xff0c;在输入密码时&#xff0c;终端界…

Mac docker+vscode

mac 使用docker vs code 通过vscode 可以使用docker容器的环境。 可以在容器安装gdb, 直接调试代码。 创建容易时候可以指定目录和容易目录可以共享文件。

研发效能城市沙龙【11月12日】深圳站-《敏捷环境下的测试自动化实践指南》—陈晓鹏丨IDCF

IDCF社区研发效能城市沙龙是一个开放、共享的平台&#xff0c;我们欢迎每一位参加者积极分享自己的经验和见解&#xff0c;构建一个互联互通的技术社区。 随着这几年业务的快速变化诉求以及敏捷开发方法的流行&#xff0c;越来越多的组织都采用敏捷模式进行项目开发。而这种时…

七、W5100S/W5500+RP2040树莓派Pico<UDP 组播>

文章目录 1. 前言2. 相关简介2.1 简述2.2 优点2.3 应用 3. WIZnet以太网芯片4. UDP 组播回环测试4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 测试现象 5. 注意事项6. 相关链接 1. 前言 UDP组播是一种基于UDP协议的通信方式&#xff0c;它允许一台计算机通过发送单…

【咕咕送书 | 第5期】国家数据局正式揭牌,数据专业融合型人才迎来发展良机

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《粉丝福利》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 ⛳️ 写在前面参与规则引入《数据要素安全流通》《Python数据挖掘&#xff1a;入门、进阶与实用案例分析》《数据保…

身份证OCR:变革的触手,掀起识别的革命

身份证OCR识别技术&#xff08;Optical Character Recognition&#xff09;是一项将身份证上的文字信息转化为可编辑、搜索、存储、分享的电子文本的技术。它的发展与信息技术和身份认证需求的不断演进密切相关。以下将简要介绍身份证OCR识别技术的历史以及兴起背景。 OCR识别…

LLaMA-Adapter源码解析

LLaMA-Adapter源码解析 伪代码 def transformer_block_with_llama_adapter(x, gating_factor, soft_prompt):residual xy zero_init_attention(soft_prompt, x) # llama-adapter: prepend prefixx self_attention(x)x x gating_factor * y # llama-adapter: apply zero_init…

Python中的random模块,随机性的神奇世界

随机性在计算机编程和数据科学中扮演着至关重要的角色。Python中的random模块提供了丰富的工具和函数&#xff0c;帮助我们生成随机数、操作随机序列&#xff0c;以及模拟随机性事件。 在本文中&#xff0c;我们将分享random模块&#xff0c;了解它的基本用法、功能和应用领域…

vim

简介 vim是一款多模式的文本编辑器&#xff0c;vim里面还有很多子命令&#xff0c;来进行代码的编写操作 常用模式图 命令模式 光标移动 shif $ 光标定义到当前行的最右侧结尾 shift ^ 光标定义到当前行的最左侧开头 shift g 光标定位到文本最末尾…