数组的对数器

2023-11-18

【原创是某客的左程云老师,我只是加了点自己的注释记个笔记】

package basic_class_01;

import java.util.Arrays;

/**

  • 对数器的作用
    对数器可以验证算法是否正确, 在比赛或者笔试的时候,如果需要大量的测试用例,而且不知道是所写的算法能够满足要求就可以使用

对数器的使用

  1. 有一个你想测试的算法a
    2.实现一个绝对正确但复杂度高的算法b //必须是正确的,不论复杂度高低
    3.实现一个随机样本产生器 //样本的长度尽量小一点,出现错误之后方便查看
  2. 实现比对算法a和b的方法
  3. 多次(100000+)比对a和b来验证a是否正确
  4. 如果有样本出错,则打印出来分析
  5. 当对此对比测试都正确时,可以基本判断算法a正确
  • @author Administrator

*/

public class Code_00_BubbleSort {

//冒泡排序
public static void bubbleSort(int[] arr) {
	if (arr == null || arr.length < 2) {
		return;
	}
	//冒泡排序从末尾开始冒泡泡,大的往后冒出(0..N-1,0..N-2,0..N-3)
	//选择排序与冒泡排序相反,从前面冒出一个最小的泡(0..N-1,1..N-1,2..N-1)
	for (int e = arr.length - 1; e > 0; e--) {
		for (int i = 0; i < e; i++) {
			if (arr[i] > arr[i + 1]) {
				swap(arr, i, i + 1);
			}
		}
	}
}

public static void swap(int[] arr, int i, int j) {
	arr[i] = arr[i] ^ arr[j];
	arr[j] = arr[i] ^ arr[j];
	arr[i] = arr[i] ^ arr[j];
}

// 好的但是不复杂的算法
public static void comparator(int[] arr) {
	Arrays.sort(arr);
}

//获得一个大小随机,值随机的数组,随机样本产生器
public static int[] generateRandomArray(int maxSize, int maxValue) {
	//因为Random[0,1),所以[0,maxSize+1)最大只能取maxSize.小数
	int[] arr = new int[(int) ((maxSize + 1) * Math.random())];
	for (int i = 0; i < arr.length; i++) {
		//正负都有可能,所以用取值范围大的随机数减去一个小的随机数
		arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
	}
	return arr;
}

// 拷贝数组
public static int[] copyArray(int[] arr) {
	if (arr == null) {
		return null;
	}
	int[] res = new int[arr.length];
	for (int i = 0; i < arr.length; i++) {
		res[i] = arr[i];
	}
	return res;
}

// 查看两个数组是否相同,只有相同了,才可以比较出来自己的方法是否错误
public static boolean isEqual(int[] arr1, int[] arr2) {
	if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
		return false;
	}
	if (arr1 == null && arr2 == null) {
		return true;
	}
	if (arr1.length != arr2.length) {
		return false;
	}
	for (int i = 0; i < arr1.length; i++) {
		if (arr1[i] != arr2[i]) {
			return false;
		}
	}
	return true;
}

//输出错误的数组,为了查验自己的问题出在哪
public static void printArray(int[] arr) {
	if (arr == null) {
		return;
	}
	for (int i = 0; i < arr.length; i++) {
		System.out.print(arr[i] + " ");
	}
	System.out.println();
}

// for test
public static void main(String[] args) {
	//testTime绝对正确的方法与被测方法的比较次数,一旦有1次结果不同立刻打印错误用例并跳出
	int testTime = 500000;
	int maxSize = 100;
	int maxValue = 100;
	boolean succeed = true;
	for (int i = 0; i < testTime; i++) {
		int[] arr1 = generateRandomArray(maxSize, maxValue);
		int[] arr2 = copyArray(arr1);
		int[] arr3 = copyArray(arr1);
		bubbleSort(arr1);
		comparator(arr2);
		if (!isEqual(arr1, arr2)) {
			succeed = false;
			printArray(arr3);打印出来错误的测试用例
			break;
		}
	}
	System.out.println(succeed ? "Nice!" : "Fucking fucked!");

	int[] arr = generateRandomArray(maxSize, maxValue);
	printArray(arr);
	bubbleSort(arr);
	printArray(arr);
}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组的对数器 的相关文章

  • 【算法导论学习】分治法求最大子数组

    最大子数组 分治法 问题分析方向 对时间复杂度的分析 样例分析 问题分析 分解问题 解决问题 合并问题 对代码的设想 中间部分的处理 递归部分 时间复杂度分析 完整代码 分治法 所谓分治法 就是把问题不断分割变小 常见的是把数组分割为两部分
  • 蓝桥杯考前必看知识点【python 代码详解】

    文章目录 前言 一 基本知识点 1 基本输入输出 2 列表转字符串 3 字符串大小写转换 4 匿名函数lambda 5 二 八 十六进制 6 chr ord转换 7 保留小数点后几位 8 排序 二 python常用内置库模块 1 facto
  • 算法:单调队列

    队列 先进先出 题型 滑动窗口 求滑动窗口里的最大 或最小 值 例1 P1886 滑动窗口 模板 单调队列 求滑动窗口里的最大小值 include
  • 算法:位运算

    求整数n的二进制表示中第k位数字是几 最右边那位为第0位 往左依次为第一位 第二位 1 把第k位移到第0位 n gt gt k 2 看一下第0位是几 x 1 include
  • sort06-快速排序

    sort 快速排序 排序原理 需求 切分原理 代码实现 快速排序和归并排序的区别 快速排序时间复杂度分析 快速排序 快速排序是对冒泡排序的一种改进 它的基本思想是 通过一趟排序将要排序的数据分割成独立的两部分 其中一部分的所有数据都比另外一
  • 代码随想录一刷-Day08

    Offer58 II 左旋转字符串 使用中间数组很容易 public String reverseLeftWords String s int n if n 0 s null s length 0 return s 使用中间数组 char
  • 冒泡排序BubbleSort

    冒泡排序是一种时间复杂度为O n 的排序算法 一般情况下算是最慢的排序算法了 不过相对比较好理解属于入门级算法 实现思想很简单就是两个双层循环 挨个元素进行比较如果内层循环的位置比外层循环小 大 则进行位置交换 否则向后查找直到循环完毕 下
  • 算法:dfs(深度优先搜索算法)

    dfs 暴搜 一条路走到黑 然后回溯 开启另一条路 再一条路走到黑 那么如何对暴搜进行优化 剪枝 当发现某一条树枝时不可能找到答案时 就没必要还在这条路走到黑一直搜索了 将这条树枝减去 趁早换一条路 如图 可以用递归来一条路走到黑 递归最恰
  • 极坐标转化

    在数学中 极坐标系是一个二维坐标系统 该坐标系统中任意位置可由一个夹角和一段相对原点 极点的距离来表示 极坐标系的应用领域十分广泛 包括数学 物理 工程 航海 航空以及机器人领域 两点间的关系用夹角和距离很容易表示时 极坐标系便显得尤为有用
  • 测试gpt的function函数功能

    官网API 科学上网查看 1 我对该功能的理解 利用gpt的上下文理解能力 在执行方法run conversation xx 时 目标锁定在 提取出functions里每个function下required属性对应的值 而真正的functi
  • 旋转图像(二维数组的旋转)——LeetCode数组算法题

    旋转图像
  • 刷题之合并二叉树

    给定两个二叉树 想象当你将它们中的一个覆盖到另一个上时 两个二叉树的一些节点便会重叠 你需要将他们合并为一个新的二叉树 合并的规则是如果两个节点重叠 那么将他们的值相加作为节点合并后的新值 否则不为 NULL 的节点将直接作为新二叉树的节点
  • 刷题之轮转数组

    给你一个数组 将数组中的元素向右轮转 k 个位置 其中 k 是非负数 示例 1 输入 nums 1 2 3 4 5 6 7 k 3 输出 5 6 7 1 2 3 4 解释 向右轮转 1 步 7 1 2 3 4 5 6 向右轮转 2 步 6
  • 刷题之二分查找

    题目 给定一个 n 个元素有序的 升序 整型数组 nums 和一个目标值 target 写一个函数搜索 nums 中的 target 如果目标值存在返回下标 否则返回 1 来源 力扣 LeetCode 链接 https leetcode c
  • 算法与数据结构—LeetCode刷题笔记

    算法刷题笔记 一 动态规划 53 最大子序和 300 最长上升子序列 70 爬楼梯 242 有效的字母异位词 463 岛屿的周长 文章与视频资源多平台更新 微信公众号 知乎 B站 头条 AI研习图书馆 一 动态规划 53 最大子序和 典型的
  • unsigned long long妙用

    洛谷 P2181 对角线 使用unsigned long long可以防止爆精度 以下是各精度的范围 include
  • 贪心(acwing)

    每次选择当前的最优解 没什么固定的套路 先试一些做法 举例子验证 尝试证明一下 严格地推 区间问题 例1 1 将每个区间按照右端点从小到大排序 2 从前往后依次枚举每个区间 如果当前区间已经包含点 则直接pass 否则选择当前区间的右端点
  • 数组的对数器

    原创是某客的左程云老师 我只是加了点自己的注释记个笔记 package basic class 01 import java util Arrays 对数器的作用 对数器可以验证算法是否正确 在比赛或者笔试的时候 如果需要大量的测试用例 而
  • 哈夫曼编解码算法(C实现)

    记得在毕业前去找工作 应聘康佳集团移动应用工程师的笔试题出了这么一道题 传输文本字符 BADCADFEED 只能出现 ABCDEF 这六个字符 使用以下的编码方式 如传输字符 BADCADFEED 接收编码 0010000110100000
  • 【数据结构】【王道408】——PPT截图与思维导图

    自用视频PPT截图 视频网址王道B站链接 23考研 408新增考点 并查集 红黑树 2023年408真题数据结构篇 408考纲解读 考纲变化 目录 第一章 绪论 第二章 线性表 顺序表 单链表 双链表 循环链表 静态链表 差别 第三章 栈

随机推荐

  • java中如何通过JDBC的方式连接sqlserver2005多实例数据库?

    java语言中 通过jdbc访问sqlserver2005数据库默认实例可以按正常的写法来建立url连接 代码如下 Connection cn DriverManager getConnection jdbc sqlserver 172 1
  • docker安装mongodb提示bash: mongo: command not found

    docker安装MongoDB容器 docker run d p 27017 27017 name mongodb e MONGO INITDB ROOT USERNAME admin e MONGO INITDB ROOT PASSWOR
  • 嵌入式数据库——sqlite3

    前言 数据库是 按照数据结构来组织 存储和管理数据的仓库 是一个长期存储在计算机内的 有组织的 可共享的 统一管理的大量数据的集合 数据库是以一定方式储存在一起 能与多个用户共享 具有尽可能小的冗余度 与应用程序彼此独立的数据集合 可视为电
  • DataGridView实现添加合计行并始终显示在底部

    DataGridView中没有合适的方法来冻结底部的合计行 这里用一种比较简单的方式实现 1 数据部分的DataGridView 不带任何滚动框2 合计部分的DataGridView 带有横向滚动框3 在画面上添加一个纵向滚动框实现的主要思
  • python爬虫网络出错怎么办_python爬虫之headers处理、网络超时问题处理

    1 请求headers处理 我们有时请求服务器时 无论get或post请求 会出现403错误 这是因为服务器拒绝了你的访问 这时我们可以通过模拟浏览器的头部信息进行访问 这样就可以解决反爬设置的问题 importrequests 创建需要爬
  • Rxjava+Retrofit嵌套处理请求,并优雅的处理异常

    前情提示 本文只是一个例子 不做过多讲解 入门知识推荐参考 仍物线大神讲解的Rxjava 如何优雅的处理服务器异常 本文没有对Rxjava进行任何封装 也没有使用retrolambda 因为对于初学者来说 看起来费 不 劲 会 而且也没必要
  • 跳转页面保存输入的信息到url上,Js现实

    Js现实 获取用户点击岗位的次数 params act add id info bx id click num click num 获取岗位选中的值 params params auth role id now id 拼接其他数据 var
  • spring源码--04--IOC原理--XmlBeanFactory(IOC容器)的初始化(不细)

    XmlBeanFactory IOC容器 的初始化 不细 1 验证过程 代码地址 https gitee com DanShenGuiZu learnDemo tree master spring源码学习 spring source lea
  • 【LeetCode专题】二分答案

    本人参考yxc y总的刷题课 总结了二分查找的两个模板 HERE 本专题为二分查找算法的应用 二分答案 目录 LeetCode 875 爱吃香蕉的珂珂 LeetCode 2187 完成旅途的最少时间 LeetCode 6325 修车的最少时
  • unity识别图片颜色并把颜色数量排序

    首先把图片放入工程 拖入组件中 运行就可以看到颜色 这些颜色都是经过排序的 颜色最多的在最前面 视频 源码
  • Linux虚拟机启用时,出现:‘VMware虚拟机中出现无法将(系统文件路径)文件当做CD-ROM映像进行连接。

    启用Linux时 出现如下错误 解决方法 请先关闭虚拟 不然无法选择文件路径 第一步 点击CD DVD IDE 查看所在文件路径是否正确 第二步 选择启动时连接 选择自己所使用的ISO影像文件 M 修改到自己所在的路径 然后重启虚拟机 即可
  • MySQL数据库 之 插入、更新与删除数据

    欢迎大家扫码关注我的微信公众号 一 插入数据 MySQL 中使用 insert 语句来向数据库表中插入新的数据记录 为表的所有字段插入数据 insert into tb name col list values value list 创建一
  • 蓝桥杯-排列序数

    题目 标题 排列序数 如果用a b c d这4个字母组成一个串 有4 24种 如果把它们排个序 每个串都对应一个序号 abcd 0 abdc 1 acbd 2 acdb 3 adbc 4 adcb 5 bacd 6 badc 7 bcad
  • 关于HFile的存储结构梳理以及快速定位rowkey

    为什么80 的码农都做不了架构师 gt gt gt 一 HFile结构介绍 为了支持数据的随机查询 HFile结构分为六个部分 1 数据块 保存表中的数据 每一个数据块由块头和一些keyValue record 组成 key的值是严格按照顺
  • Ubuntu18.04安装CUDA11.3和cuDNN8.2.0

    今天在服务器上跑代码 发现报错 说是CUDA版本不对 然后看了一下服务器的版本 发现是9 0 这就有问题了啊 3090的显卡得用11 0上的版本啊 所以接着配置一下深度学的环境 记录一下方便以后查阅 Ubuntu18 04安装CUDA11
  • cocos2dx跨平台直播实例-ffmpeg-ios篇

    一 环境 mac 10 12 2 cocos2dx 3 13 1 ffmpeg 3 0 二 新建项目和编译库 cocos2dx按照官网新建一个实例 ffmpeg编译ios库http blog csdn net u013654125 arti
  • delphi取得文件图标并在TListView中显示

    delphi取得文件图标并在TListView中显示 技术要点 一 使用SHGetFileInfo函数获取指定扩展名的文件图标 需要引用ShellAPI单元 二 使用TStringList来保存扩展名与其图标的索引号 当添加一个文件名至TL
  • Linux 虚拟化网络技术 — 虚拟网络协议栈

    前言 本文通过 OpenStack Neutron L3 Agent 实现的 Linux 虚拟路由器来描述 Linux 的虚拟网络协议栈 Neutron L3 agent 概述 Neutron L3 agent 服务 运行在 OpenSta
  • ubutun18.04安装Ros-melodic

    在Mac下使用虚拟机VMware Fusion安装了Ubuntu18 04系统 并在Ubuntu系统安装Ros 按照版本要求18系统对应Ros melodic 鉴于在网上很少在Mac上装Ros melodic 以该文章以记录安装的过程 一
  • 数组的对数器

    原创是某客的左程云老师 我只是加了点自己的注释记个笔记 package basic class 01 import java util Arrays 对数器的作用 对数器可以验证算法是否正确 在比赛或者笔试的时候 如果需要大量的测试用例 而