十种排序算法(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-1
	return (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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微软bing大声朗读文档或网页卡顿老是中断,用离线的huihui就很流畅但没那么自然

默认的xiaoxiao_online好听&#xff0c;但卡顿&#xff0c;朗读功能确实受到了网络状态的影响。 大概率是网络问题。

Android Glide判断图像资源是否缓存onlyRetrieveFromCache,使用缓存数据,Kotlin

Android Glide判断图像资源是否缓存onlyRetrieveFromCache&#xff0c;使用缓存数据&#xff0c;Kotlin import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity…

目标检测算法发展史

前言 比起图像识别&#xff0c;现在图片生成技术要更加具有吸引力&#xff0c;但是要步入AIGC技术领域&#xff0c;首先不推荐一上来就接触那些已经成熟闭源的包装好了再提供给你的接口网站&#xff0c;会使用别人的模型生成一些图片就能叫自己会AIGC了吗&#xff1f;那样真正…

0001net程序设计-net大学校园二手交易平台

文章目录 摘 要目 录系统设计开发环境 摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&…

数据结构───链表

花费一个周时间学完了链表&#xff08;的一部分&#xff09;&#xff0c;简单总结一下。 链表的学习离不开画图&#xff0c;将其抽象成一种逻辑模型&#xff0c;可以减少思考时间&#xff0c;方便理解。 链表大致分为8种结构&#xff0c;自己学习并实现了两种结构&#xff0c;也…

UE5 日记(人物连招:蒙太奇动画通知(含视频链接))

教程https://www.youtube.com/watch?vsWpENaVGj2M&listPLiSlOaRBfgkcPAhYpGps16PT_9f28amXi&index10&ppiAQB 相关蓝图 连招逻辑 动画通知类 逻辑分析 1.用户输入 已搭载战斗系统模块,可以收到输入指令 2.连击 第一次攻击&#xff1a; 第一次攻击&#xff0c;…

初探802.11协议(6)——Wi-Fi 6新特性简介

目录 前言 场景需求 Trigger Frames 一. BSS Color 1.1 机制 1.1.1 Color Collision 1.2 Frame Format 1.2.1 BSS Color Information 二. TWT 2.1 节能 2.1.1 PSM 2.1.2 从PSM到TWT 2.1.2.1 TWT模式 2.2 Frame Format REF 前言 802.11ax以前强调"高吞吐量…

基于 Appium 的 Android UI 自动化测试!

自动化测试是研发人员进行质量保障的重要一环&#xff0c;良好的自动化测试机制能够让开发者及早发现编码中的逻辑缺陷&#xff0c;将风险前置。日常研发中&#xff0c;由于快速迭代的原因&#xff0c;我们经常需要在各个业务线上进行主流程回归测试&#xff0c;目前这种测试大…

@CallSuper注解方法学习

CallSuper注解方法学习 CallSuper注解是什么&#xff1f;CallSuper注解使用CallSuper 值得一提的事总结 CallSuper注解是什么&#xff1f; CallSuper 是 Android 开发中使用的一个注解&#xff0c;它的主要用途是确保在子类重写父类的方法时&#xff0c;调用 super 方法。这在…

【Qt】绘图与绘图设备

文章目录 绘图设备QPainter绘图实例案例1案例2-高级设置案例3&#xff1a;利用画家画资源图片 点击按钮移动图片 QtPaintDevice实例Pixmap绘图设备QImage 绘图设备QPicture 绘图设备 QPainter绘图 Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系…

云安全—K8S API Server 未授权访问

0x00 前言 master节点的核心就是api服务&#xff0c;k8s通过REST API来进行控制&#xff0c;在k8s中的一切都可以抽象成api对象&#xff0c;通过api的调用来进行资源调整&#xff0c;分配和操作。 通常情况下k8s的默认api服务是开启在8080端口&#xff0c;如果此接口存在未授…

RPC与HTTP的关系

首选理清楚关系 RPC与HTTP是两个不同维度的东西 HTTP 协议&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff0c;又叫做超文本传输协议&#xff0c;是一种传输协议&#xff0c;平时通过浏览器浏览网页网页&#xff0c;用到的就是 HTTP 协议。 而 RPC&#xff0…

【java】【MyBatisPlus】【三】【完】MyBatisPlus扩展

目录 一、分页查询lambdaQueryWrapper 二、自定义分页查询 1、UserMapper 2、UserMapper.xml 3、测试方法 三、MybatisX插件 1、安装 2、MybatisX代码快速生成 2.1 连接数据库 2.2 操作需要生成代码的表 3、MybatisX快速生成CRUD&#xff08;前提步骤2生成&#xff…

【算法练习Day32】 斐波那契数爬楼梯使用最小花费爬楼梯

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 斐波那契数爬楼梯使用最小花…

探讨下前端测试的常见场景

前端测试 场景 这边指的测试是指白盒测试&#xff0c;用代码来测试代码。 测试有利于提升代码质量。 代码功能和需求一致。根据需求&#xff0c;写测试。测试通过了&#xff0c;则表明需求实现了。保证代码重构后&#xff0c;未改坏以前的功能。代码重构后&#xff0c;能通过…

[C++入门系列]——类和对象下篇

​作者主页 &#x1f4da;lovewold少个r博客主页 ⚠️本文重点&#xff1a;C类和对象下篇知识点讲解 &#x1f449;【C-C入门系列专栏】&#xff1a;博客文章专栏传送门 &#x1f604;每日一言&#xff1a;宁静是一片强大而治愈的神奇海洋&#xff01; 目录 前言 再谈构造函数…

解决方案|法大大电子合同加速互联网家装服务升级

随着互联网的快速发展以及政策的不断推动&#xff0c;家装行业“互联网”趋势也不断凸显。行业内很多企业已经开始在全链条业务中使用电子合同&#xff0c;基于电子合同合规化、无纸化、线上化、智能化的价值赋能&#xff0c;实现家装从需求沟通、家装设计、选材、装修施工、验…

【MySQL--->内外连接】

文章目录 [TOC](文章目录) 一、内连接二、左外连接三、右外连接 一、内连接 内连接就是将两个表连接进行笛卡尔积查询 显示SMITH的名字和部门名称 二、左外连接 左外连接就是以左面的表为主&#xff0c;即便是右边的表没有而左边表项中有的&#xff0c;依然显示 查询所有学…

jenkins详细安装教程

这里写目录标题 一、Jenkins安装与部署1-1、Jenkins的简介1-2、下载需要的软件1-2-1 jekins.war1-2-2 tomcat安装方式 1-3、使用11版本的jdk1-4、开启jenkins1-5、获取密码1-5 修改镜像(可改可不改) 二、卸载Jenkins 一、Jenkins安装与部署 1-1、Jenkins的简介 Jenkins是一个…

Linux 基础入门

Linux 简介 Linux 是一种自由和开放源码的类 UNIX 操作系统。 Linux 英文解释为 Linux is not Unix。 Linux 是在 1991 由林纳斯托瓦兹在赫尔辛基大学上学时创立的&#xff0c;主要受到 Minix 和 Unix 思想的启发。 Linux 内核最初只是由芬兰人林纳斯托瓦兹&#xff08;Linus T…