数据集中度分析,数据分布情况

一、宏定义及头文件


#include <stdio.h>
#include <math.h>
#include <string.h>
#include<stdlib.h>
#include<time.h>

#ifndef u8
typedef unsigned char																u8;
#endif

#ifndef u16
typedef unsigned short int															u16;
#endif

#ifndef u32
typedef unsigned int																u32;
#endif

#ifndef u64
typedef unsigned long long int														u64;
#endif

#ifndef s8
typedef signed char																	s8;
#endif

#ifndef s16
typedef signed short int															s16;
#endif

#ifndef s32
typedef signed int																	s32;
#endif

#ifndef s64
typedef signed long long int														s64;
#endif

二、生成随机数


/********************************************************************************
* 函数名 : vGeneration_Random_Number
* 描  述 : 生成随机数
* 输  入 : pDat   : 源数据
*		   maxVal : 最大值
*		   minVal : 最小值
*		   num    : 个数
********************************************************************************/
void vGeneration_Random_Number(u16 * pDat, u16 maxVal, u16  minVal, u16 num)
{
	u16 i    = 0;
	u16 dat  = 0;
	u16 temp = 0;

	temp = maxVal - minVal + 1;
	srand(time(NULL));
	for (i = 0; i < num; ++i)
	{
		dat = (u16)((rand() % temp) + minVal);
		*(pDat + i) = dat;
	}
}

三、冒泡升排序


/* 冒泡升排序 */
void vBubble_RiseSort_U16(u16 * pDat, u16 len)
{
	u16 i = 0, j = 0;
	u16 temp = 0;

	for (i = 0; i < (len - 1); i++)
	{
		for (j = (i + 1); j < len; j++)
		{
			if (*(pDat + j) < *(pDat + i))
			{
				temp = *(pDat + i);
				*(pDat + i) = *(pDat + j);
				*(pDat + j) = temp;
			}
		}
	}
}

四、数据集中度分析

/********************************************************************************
* 函数名 : vConcentrate_Analyse
* 描  述 : 数据集中度分析
* 输  入 : pDat       : 源数据
*		   len        : 数据长度
*		   startIndex : 开始索引
*		   gapVal     : 相邻间隔数据值
*		   actCount   : 有效最小数据量
********************************************************************************/
void vConcentrate_Analyse(u16 * pDat, u16 len, u16 startIndex, u16 gapVal, u16 actCount)
{
	u16 i     = 0;
	u16 num   = 1;
	u8 valid  = 0;
	u16 index = 0;
    u16 start = 0;


	//开始索引
    start = index = startIndex;
	for (i = start; i < len - 1; i++)
	{
		//有效相邻间隔值
		if ((pDat[i + 1] - pDat[i]) <= gapVal)
		{
			num++;
			valid = 1;
		}
		else
		{
			valid = 0;
		}


		if ((valid == 0) || (i == (len - 2)))
		{
			//有效最小数据量
			if (num >= actCount)
			{
				printf("Index:%-3d  Num:%-3d ==> ", index, num);
				for (u16 x = index; x < (num + index); x++)
				{
					printf("[%02d]%-4d   ", x, pDat[x]);
				}
				printf("\r\n");
			}

			index = i + 1;
			num = 1;
		}
	}
}

五测试例程


int main(void) 
{
	#define DAT_NUM  (20)
	u16 Dat[20] = {0};
	u16 i = 0;

	vGeneration_Random_Number(Dat, 500, 50, DAT_NUM);
	vBubble_RiseSort_U16(Dat, DAT_NUM);

	printf("Original Data:\r\n");
	for (i = 0; i < DAT_NUM; i++)
	{
		if ((i) && (i%5==0))
			printf("\r\n");

		printf("[%02d]%-5d   ", i, Dat[i]);
	}
	printf("\r\n\r\n");

	printf("Concentrate Analyse:\r\n");
	vConcentrate_Analyse(Dat, DAT_NUM, 2, 30, 3);


    printf("Date: %s  %s\r\n", __DATE__, __TIME__);
    while (1);
    return 0;
}

六、运行情况

开始运行...
Original Data:
[00]51      [01]76      [02]90      [03]107     [04]108     
[05]118     [06]131     [07]154     [08]168     [09]268     
[10]319     [11]357     [12]377     [13]383     [14]387     
[15]421     [16]443     [17]448     [18]467     [19]478     

Concentrate Analyse:
Index:2    Num:7   ==> [02]90     [03]107    [04]108    [05]118    [06]131    [07]154    [08]168    
Index:11   Num:4   ==> [11]357    [12]377    [13]383    [14]387    
Index:15   Num:5   ==> [15]421    [16]443    [17]448    [18]467    [19]478    
Date: Jul 18 2022  13:42:47

在这里插入图片描述

开始运行...
Original Data:
[00]147     [01]150     [02]152     [03]183     [04]199     
[05]201     [06]232     [07]236     [08]239     [09]248     
[10]260     [11]272     [12]299     [13]304     [14]336     
[15]353     [16]372     [17]381     [18]436     [19]499     

Concentrate Analyse:
Index:3    Num:3   ==> [03]183    [04]199    [05]201    
Index:6    Num:8   ==> [06]232    [07]236    [08]239    [09]248    [10]260    [11]272    [12]299    [13]304    
Index:14   Num:4   ==> [14]336    [15]353    [16]372    [17]381    
Date: Jul 18 2022  13:44:10

在这里插入图片描述

开始运行...
Original Data:
[00]74      [01]166     [02]187     [03]189     [04]189     
[05]234     [06]264     [07]271     [08]281     [09]317     
[10]319     [11]326     [12]326     [13]363     [14]377     
[15]412     [16]416     [17]482     [18]486     [19]494     

Concentrate Analyse:
Index:2    Num:3   ==> [02]187    [03]189    [04]189    
Index:5    Num:4   ==> [05]234    [06]264    [07]271    [08]281    
Index:9    Num:4   ==> [09]317    [10]319    [11]326    [12]326    
Index:17   Num:3   ==> [17]482    [18]486    [19]494    
Date: Jul 18 2022  13:45:13

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值