C++实现MATLAB一维数组函数findpeaks()函数求一维离散值极值(波峰波谷)

一、代码

#include <iostream>
#include <vector>
using namespace std;

//
//C++实现求一维离散数据极值(波峰、波谷)
//
//参数:数组,数组大小
void findPeaks(int *num,int count)
{
	vector<int> sign;
	for(int i = 1;i<count;i++)
	{
		/*相邻值做差:
		 *小于0,赋-1
		 *大于0,赋1
		 *等于0,赋0
		 */
		int diff = num[i] - num[i-1];
		if(diff>0)
		{
			sign.push_back(1);
		}
		else if(diff<0)
		{
			sign.push_back(-1);
		}
		else
		{
			sign.push_back(0);
		}
	}
	//再对sign相邻位做差
	//保存极大值和极小值的位置
	vector<int> indMax;
	vector<int> indMin;

	for(int j = 1;j<sign.size();j++)
	{
		int diff = sign[j]-sign[j-1];
		if(diff<0)
		{
			indMax.push_back(j);
		}
		else if(diff>0)
		{
			indMin.push_back(j);
		}
	}
	cout<<"极大值为:"<<endl;
	for(int m = 0;m<indMax.size();m++)
	{
		cout<<num[indMax[m]]<<"  ";
	}
	cout<<endl;
	cout<<"极小值为:"<<endl;
	for(int n = 0;n<indMin.size();n++)
	{
		cout<<num[indMin[n]]<<"  ";
	}
}

int main()
{
	int a[] = {1,2,10,2,4,1,8,10,23,0};
	findPeaks(a,10);
	return 0;
}

二、运行结果:

三、用MATLAB验证结果

时间: 2024-12-08 02:49:32

C++实现MATLAB一维数组函数findpeaks()函数求一维离散值极值(波峰波谷)的相关文章

一维数组两步式求最大子数组和

asd import java.util.Scanner; public class SeeAll { public static void  main(String arg[]) {  System.out.println("你有俩选择,要么自己一下下点,要么它自己动,选前边呢你就扣个1,要不你就扣个2");  Scanner scan = new Scanner(System.in);  int i = scan.nextInt();    if(i==1) { System.ou

函数、内存、一维数组、二维数组【4】

  函数的定义 什么是函数? •函数就是定义在类中的具有特定功能的一段独立小程序. •函数也称为方法. 函数的格式: •修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...)   {   执行语句;   return 返回值;   }   返回值类型:函数运行后的结果的数据类型.   参数类型:是形式参数的数据类型.   形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数.   实际参数:传递给形式参数的具体数值.   return:用于结束函数.   返回值

PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组'; } else { echo '不是一维数组'; } PHP手册: int count ( mixed $var [, int $mode ] )  --  计算数组中的单元数目或对象中的属性个数  如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组

关于指针数组、数组指针、指针函数、函数指针的归纳小结

指针数组:如int  *p[4]:表示一个一维数组内存放着三个指针变量, 分别是p[0].p[1].p[2].p[3],默认情况下这三个指针变量都指向NULL的,所以要分别赋值. 数组指针:如int  (*p)[4]:表示定义一个数组指针,指向含4个元素       的一维数组. 指针函数:如int  *p():声明了一个函数p,返回值为一个int型的指针. 函数指针:如int  (*p)():函数指针实质是一个指针,该指针指向函数的入口地址 最好的判别方法就是看"*",括弧把&quo

JAVA的 一维数组、二维数组、三维数组、多维数组等。

这个数组可以看做新手学习,从一维数组 到 多维 数组 循环渐进,其实看起也很简单,一看便知,众所周知,一维.二维或许经常用到,用到二维以上应该就很少了. public class test { public static void main(String[] args) { /*一维数组*/ int num[] = {0,1,2}; /*下面输出 3 行数据,0 ~ 2*/ for (int i = 0; i < num.length; i++) { System.out.println("

判断一个数组是不是一维数组

int count ( mixed $var [, int $mode ] )  --  计算数组中的单元数目或对象中的属性个数  如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数.对计算多维数组的所有单元尤其有用.mode 的默认值是 0.count() 识别不了无限递归. <?php if (count($array) == count($array, 1)) {     echo '是一维数组'; } else {     ech

c语言一维数组做参数传递给函数:

今天碰到了一维数组做函数参数的问题,那就扒一扒这个问题: 首先抛结论: 1:C语言中,当一维数组做函数参数时,编译器总是把它解析成一个指向其首元素的指针. 2:实际传递的数组大小与函数形参指定的数组大小没有关系. 然后举例说明: 下面是一个元素交换函数,把数组array[i]和array[j]交换位置.注意看数组是怎么传递给函数的. 正确的写法1: 解释说明:编译器把array解析成指向整形元素的指针,也就是数组的首地址,方括号中加不加指定数字都可以,因为编译器根本不看,因此最好不写,以免引起误

输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩 从大到小打印。三个功能(输入是一个函数,求平均分是一个函数,排序是一个 函数)都用函数实现,最后在main方法中调用。

/*5.输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩从大到小打印.三个功能(输入是一个函数,求平均分是一个函数,排序是一个函数)都用函数实现,最后在main方法中调用.*/ #include <stdio.h> int inputScore(){ int score; scanf("%d",&score); return score;} double avg(int scores[],int length){ int i,score = 0;

一维数组和二维数组传出函数

#define LOCAL #include<cstdio> #include<cstdlib> #include<iostream> using namespace std; typedef int ElemType; const int maxSize=10; //传入函数的一维数组经过函数之后数组元素发生变化 int REV(int *a,int x,int y) { int i=x,j=y; while(i<j) { int temp=a[i]; a[i]