当前位置: 首页 > news >正文

算法 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;
}

http://www.lryc.cn/news/512790.html

相关文章:

  • windows系统安装完Anaconda之后怎么激活自己的虚拟环境并打开jupyter
  • leetcode 面试经典 150 题:矩阵置零
  • SQL中的TRIM用法
  • Git Flow 工作流:保障修改不破坏主功能的完整指南20241230
  • CentOS 7安装Docker详细教程
  • 如何在 Ubuntu 22.04 上安装 Varnish HTTP 教程
  • 网络安全概念详解
  • 【前端】-音乐播放器(源代码和结构讲解,大家可以将自己喜欢的歌曲添加到数据当中,js实现页面动态显示音乐)
  • PawSQL性能巡检平台 (3) - 慢查询采集和优化
  • 在docker中对MySQL快速部署与初始数据
  • Mysql(MGR)和ProxySQL搭建部署-Kubernetes版本
  • 将现有Web 网页封装为macOS应用
  • 药片(药丸)和胶囊识别数据集,使用yolo,pasical voc xml, coco json格式标注,可识别药片和胶囊两种标签,2445张原始图片
  • 在Linux的世界中怎么玩转定时器任务
  • HTML——20 自定义属性
  • 2025:OpenAI的“七十二变”?
  • mac docker部署jar包流程
  • 【postgresql 物化视图】自动刷新物化视图2种方法
  • HMSC联合物种分布模型
  • stm32f103zet6 ds18b20
  • 【前端,TypeScript】TypeScript速成(六):函数
  • React引入Echart水球图
  • 谷歌浏览器的智能推荐功能使用指南
  • GitHub 上排名前 11 的开源管理后台(Admin Dashboard)项目
  • 【运维】部署MKDocs
  • C# 读取多种CAN报文文件转换成统一格式数据,工具类:CanMsgRead
  • 计算机网络 (8)物理层的传输方式
  • 【C#】WPF设置Separator为垂直方向
  • 太速科技-519-基于ZU19EG的4路100G光纤的PCIe 加速计算卡
  • 安卓入门二 Kotlin基础