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

1.准备工作

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

#pragma once
#include

//为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
#include
#include
#include
#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

十种排序算法(1) - 准备测试函数和工具_第1张图片

你可能感兴趣的:(排序算法,算法,c++)