算法 class 005 (对数器C语言实现)
对数器的概念:
用来测试你的算法是否正确。
怎么做呢?
1:比如,写个冒泡排序,作为对比的对象
2:生成一个随机数 数组,用来测试
3:用冒泡排序和你想要验证的那个排序算法,同时对这个数组排序,所以这个数组我们需要两份一样的。
4:需要验证一个验证函数验证
5:多次生成随机数组,然后排序验证,如果都没有出错,大概率你写的那个排序就是正确的
1、生成随机数组
1、定义时间时间戳,以及两个变量,一个用来生成数组的长度,一个用来生成每一个元素的大小
2、定义一个变量表示本次的数组范围然后用一个函数来生成这个随机数组
生成随机数组函数
2、拷贝数组
arr1 是生成的随机数组,可以直接使用,也可以多拷贝一份,我这里直接使用,所以两个数组就够了,待会用冒泡排序和插入排序比较。
拷贝函数
3、排序
用 冒泡排 arr1; 这俩排序在 class 004文章中
用 插入排 arr2;
4、写验证函数验证
函数的返回值是 bool类型的,如果为真(fruit 非 0值),表示你的测试方法这一次通过了
验证函数
5、多次测试
只需要再定义一个变量套在外面就行
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <time.h> #if 1; void Swap(int* arr, int x, int y) //x y 为下标 {int tmp = arr[x];arr[x] = arr[y];arr[y] = tmp;} void BubbleSort(int* arr, int size)//冒泡排序 {//if (arr == NULL || size < 2) return;for (int i = size - 1; i > 0; i--){ // i 用来放入最大值int count = 0;//用来计数,如果提前排好序了,就提前结束for (int j = 0; j < i; j++){ // j 用来比较两个数if (arr[j] > arr[j + 1]){//如果 j 大与 j 后一个数Swap(arr, j, j + 1);//就交换count++;//计数器加1}}if (count == 0)break;} }void InsertSort(int* arr, int size)//插入排序 {//if (arr == NULL || size < 2) return;for (int i = 1; i < size; i++){for (int j = i; j > 0; j--){if (arr[j] < arr[j - 1]){Swap(arr, j, j - 1);}elsej = 0;}} }int* randomArray(n, V)//生成随机数组 {int* arr = (int*)malloc(n * sizeof(int));//开辟 n 个int类型的空间if (arr == NULL){perror("randomArray-malloc::failed");exit(EOF);}for (int i = 0; i < n; i++)//循环 n 次{arr[i] = rand() % V+1;//每次放入一个大小在 [0 ~ V-1]之间的数}return arr;//返回该地址 } int* copyArray(int n,int* arr1)//拷贝数组 {int* arr2 = (int*)malloc(n * sizeof(int));//开辟一个 n 个 int 类型的地址if (arr2 == NULL){perror("randomArray-malloc::failed");exit(EOF);}for (int i = 0; i < n; i++){arr2[i] = arr1[i];//将 arr1 中的每一给元素赋值给 arr2,就算拷贝完成了}return arr2;//返回 arr2 的地址}bool sameArray(int* arr1, int* arr2, int n) {for (int i = 0; i < n; i++){if (arr1[i] != arr2[i])//每一个元素作比较return false;//如果有不一样的就返回 false}return true;//一个都没有返回 ture } void PrintArray(int* arr,int*arr2 ,int size) {for (int i = 0; i < size; i++){printf("%d %d", arr[i], arr2[i]);printf("\n");}}int main() {srand((unsigned int)time(NULL));int N = 30; // 随机数组最大长度int V = 1000; // 随机数组每个值范围int times = 20;for (int i = 0; i < times; i++){printf("测试开始\n");int n = rand() % N + 1; //本次的数组大小,范围[1 ~ N-1] int* arr1 = randomArray(n, V);//生成随机数数组int* arr2 = copyArray(n, arr1);//拷贝一份BubbleSort(arr1, n);InsertSort(arr2, n);bool fruit = sameArray(arr1, arr2, n);if (fruit){printf("测试通过 - %d\n\n", i);PrintArray(arr1, arr2, n);free(arr1);free(arr2);}else{printf("测试失败 - %d\n\n", i);free(arr1);free(arr2);return EOF;}}return 0; }
相关文章:

算法 class 005 (对数器C语言实现)
对数器的概念: 用来测试你的算法是否正确。 怎么做呢? 1:比如,写个冒泡排序,作为对比的对象 2:生成一个随机数 数组,用来测试 3:用冒泡排序和你想要验证的那个排序算法,同…...

windows系统安装完Anaconda之后怎么激活自己的虚拟环境并打开jupyter
1.在win主菜单中找到Anaconda安装文件夹并打开终端 文件夹内有所有安装后的Anaconda的应用软件和终端窗口启动窗口 点击Anaconda Prompt(Anaconda)就会打开类似cmd的命令终端窗口,默认打开的路径是用户名下的路径 2.激活虚拟环境 使用命令…...

leetcode 面试经典 150 题:矩阵置零
链接矩阵置零题序号73题型二维数组解题方法标记数组法难度中等熟练度✅✅✅✅ 题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1]…...
SQL中的TRIM用法
TRIM 是 SQL 中用于去除字符串两端(左侧和右侧)的空格或特定字符的函数。这个函数常用于清理数据中的无效空白字符,尤其是在从外部系统导入数据时,常常会遇到数据两端有不必要的空格,使用 TRIM 可以去除这些多余的字符…...

Git Flow 工作流:保障修改不破坏主功能的完整指南20241230
Git Flow 工作流:保障修改不破坏主功能的完整指南 引言 在团队协作和个人项目中,Git Flow 是一种可靠的分支管理策略。通过清晰的分工和规范的流程,它能有效保障代码改动的安全性,避免修改破坏主功能,同时提高开发效…...

CentOS 7安装Docker详细教程
本文以 CentOS7.8 为例安装 Docker 26.1.4 、Docker Compose、以及 Docker 镜像仓库。 1.安装Docker社区版 1.1 安装准备 1.1.1 检查系统环境 Docker 不支持32位的 CentOS 7 系统,要求系统内核版本为3.10 以上,可以通过命令 uname -r 来查看当前系统…...

如何在 Ubuntu 22.04 上安装 Varnish HTTP 教程
简介 在本教程中,我们将学习如何在 Ubuntu 22.04 服务器上安装和配置 Varnish HTTP。 Varnish 是一款高性能的 HTTP 加速器,旨在提高内容密集型动态网站的速度。它通过将网页缓存在内存中来工作,从而减少 Web 服务器的负载,并显…...
网络安全概念详解
人们对网络安全工程师的有哪些误会? “你们搞安全的盗个微信号/ QQ号应该很简单吧?” 说起来,我们经常说安全、安全,网络安全到底是什么? 一、什么是网络安全? “网络安全是指网络系统的硬件、软件及其…...

【前端】-音乐播放器(源代码和结构讲解,大家可以将自己喜欢的歌曲添加到数据当中,js实现页面动态显示音乐)
前言:音乐播放器是前端开发中的一个经典项目,通过它可以掌握很多核心技术,如音频处理、DOM操作、事件监听、动画效果等。这个项目不仅能提升前端开发的技能,还能让开发者深入理解JavaScript与HTML的协同作用。 页面展示࿱…...

PawSQL性能巡检平台 (3) - 慢查询采集和优化
在数据库运维管理中,慢查询一直是影响系统性能的重要因素。本文将详细介绍PawSQL数据库性能巡检平台在慢查询管理和优化方面的功能特性,帮助数据库管理员更好地应对性能挑战。 一、PawSQL巡检平台慢查询管理概述 PawSQL平台提供了全面的慢查询管理功能&…...

在docker中对MySQL快速部署与初始数据
1.准备工作 将已经准备好的Dockerfile文件与数据库初始化脚本init.sql放到 /usr/local目录中。 Dockerfile文件内容: FROM mysql:5.7 WORKDIR /docker-entrypoint-initdb.d ADD init.sql . FROM 代表来自mysql5.7的镜像,作为基准镜像。 WORKDIR设置工…...
Mysql(MGR)和ProxySQL搭建部署-Kubernetes版本
一、Mysql(MGR) 1.1 statefulSet.yaml apiVersion: apps/v1 kind: StatefulSet metadata:labels:app: mysqlname: mysqlnamespace: yihuazt spec:replicas: 3serviceName: mysql-headlessselector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:affinity:p…...
将现有Web 网页封装为macOS应用
文章目录 方式一:Unite for macOS方式二:Web2Desk方式三:Nativefier方式四:Flutter Flutter WebView Plugin总结 方式一:Unite for macOS Unite 是一款专为 macOS 设计的工具,可以将任意 Web 页面快速封装…...

药片(药丸)和胶囊识别数据集,使用yolo,pasical voc xml, coco json格式标注,可识别药片和胶囊两种标签,2445张原始图片
药片(药丸)和胶囊识别数据集,使用yolo,pasical voc xml, coco json格式标注,可识别药片和胶囊两种标签,2445张原始图片 数据集分割 训练组80% 1967图片 有效集13% 317图片 测试集7% 161图片 预处…...
在Linux的世界中怎么玩转定时器任务
定时器使用 先是看到一段使用Linux Sevice服务的脚本,意外发现在ExecStart启动脚本中,它利用无限循环做定时任务的事情,非常突兀! 觉得既然用得了Linux Service,那么,与之配套的cron定时器服务是否更应该…...
HTML——20 自定义属性
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>自定义属性</title></head><body><a href"https://ai.m.taobao.com" 自定义属性"属性值">淘宝网</a><a href"h…...

2025:OpenAI的“七十二变”?
朋友们,准备好迎接AI的狂欢了吗?🚀 是不是跟我一样,每天醒来的第一件事就是看看AI领域又有什么新动向? 尤其是那个名字如雷贯耳的 OpenAI,简直就是AI界的弄潮儿,一举一动都牵动着我们这些“AI发…...

mac docker部署jar包流程
mac docker部署jar包流程 默认服务器已经准备好了相关的准备工作,如:docker,docker内安装所需软件数据库,jdk等,将要部署等jar包。 1:将jar 包上传到服务器目录下:/usr/local/service (没有目录可以自己创建…...
【postgresql 物化视图】自动刷新物化视图2种方法
普通视图就是一个虚拟表,不占内存。而物化视图是存在的,占内存。 物化视图,默认是手动刷新。下面是手动刷新的例子。我们来创建一个物化视图。 create MATERIALIZED VIEW dnh_analasis_view as select cjsj,a,b,c,d from table_1; REFRESH …...
HMSC联合物种分布模型
联合物种分布模型(Joint Species Distribution Modelling,JSDM)在生态学领域,特别是群落生态学中发展最为迅速,Hmsc是物种群落分层模型的缩写(Hierarchical Modelling of Species Communities),它是一种基于…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...