C语言杨氏矩阵实例教你编写

 更新时间:2023年02月01日 14:52:24   作者:莫陌尛.  
杨氏矩阵是一个数字矩阵,矩阵的每一行从左到右一次递增,矩阵从上到下递增,在这样的矩阵中查找一个数字是否存在。时间复杂度小于O(N),有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

一、杨氏矩阵是什么

一个数字矩阵,矩阵的每一行从左到右一次递增,矩阵从上到下递增,在这样的矩阵中查找一个数字是否存在。时间复杂度小于O(N)。

二、编写步骤

1.首先给出一个三乘三的矩阵,我们想找到数字7是否在这个数组之中,如图所示。

2. 我们给出的方法是一种从右上角开始,另一种是从左下角开始。比如从右上角开始,编写一个函数。

3. 函数的编写。从右上角开始,将右上角数字与数字7比较,如果数字7大于右上角的数字(3)(因为第一行最大的数字是右上角的数字(3),可以确定所判断的数字不在第一行),那么排除第一行,且行数加一继续判断右上角数字与数字7的大小;如果数字7小于右上角的数字(3),那么排除第一列,且列数减一继续判断。至到判断到数字与7相等,返回1;否则判断到左下角数字,未能与数字7相等,返回0。

4. 函数的返回类型是int,返回1或者0,判断如果为1,证明数组矩阵存在数字7,反之没有。

1.代码的编写

int FindNum(int arr[3][3],int k,int row,int col)
{
	int x = 0;
	int y = col-1;
	while(x<=row&&y>=0)
	{
		if(arr[x][y]<k)
		{
			x++;
		}
		else if(arr[x][y]>k)
		{
			y--;
		}
		else
		//找到了;
		return 1;
	}
	//找不到
	return 0;
}
int main()
{
	int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}};
	int k = 7;
	int ret = FindNum(arr,k,3,3);
	if(ret ==1)
	{
		printf("找到了\n");
	}
	else
	printf("找不到\n");
	return 0;
}

2.运行结果

三、程序的改进

在数组矩阵中,如果能找到相应的数字如7,那么在基础之上输出数字的下标。

1.代码的编写

int FindNum(int arr[3][3],int k,int* px,int* py)
{
	int x = 0;
	int y = *py-1;
	while(x<=*py&&y>=0)
	{
		if(arr[x][y]<k)
		{
			x++;
		}
		else if(arr[x][y]>k)
		{
			y--;
		}
		else
		{//找到了;
			*px = x;
			*py = y;
			return 1;
		}
	}
	//找不到
	return 0;
}
int main()
{
	int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}};
	int k = 7;
	int x = 3;
	int y = 3;
	//返回型参数
	int ret = FindNum(arr,k,&x,&y);
	if(ret ==1)
	{
		printf("找到了\n");
		printf("下标是:%d,%d\n",x,y);
	}
	else
	printf("找不到\n");
	return 0;
}``

2.运行结果

四、总结

杨氏矩阵。是对组合表示理论和舒伯特演算很有用的工具。它提供了一种方便的方式来描述对称和一般线性群的群表示,并研究它们的性质。杨氏矩阵是剑桥大学大学数学家阿尔弗雷德·扬在1900年提出。

杨氏矩阵百科

到此这篇关于C语言杨氏矩阵实例教你编写的文章就介绍到这了,更多相关C语言杨氏矩阵内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c++ map索引不存在的key可能导致的后果分析

    c++ map索引不存在的key可能导致的后果分析

    这篇文章主要介绍了c++ map索引不存在的key可能导致的后果分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • C++实现LeetCode(62.不同的路径)

    C++实现LeetCode(62.不同的路径)

    这篇文章主要介绍了C++实现LeetCode(62.不同的路径),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • iOS锁屏音频播放控制及音频信息设置

    iOS锁屏音频播放控制及音频信息设置

    这篇文章主要为大家详细介绍了iOS锁屏音频播放控制及音频信息设置,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • OpenCV实现高斯噪声

    OpenCV实现高斯噪声

    这篇文章主要为大家详细介绍了OpenCV实现高斯噪声,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • VisualStudio Community2019在安装的过程中无法进入安装界面的解决方法

    VisualStudio Community2019在安装的过程中无法进入安装界面的解决方法

    这篇文章主要介绍了VisualStudio Community2019在安装的过程中无法进入安装界面的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • C++中Boost的智能指针weak_ptr

    C++中Boost的智能指针weak_ptr

    这篇文章介绍了C++中Boost的智能指针weak_ptr,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • C语言实现ATM系统程序的完整代码

    C语言实现ATM系统程序的完整代码

    这篇文章主要介绍了C语言实现ATM系统程序的完整代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • C语言 function recursion函数递归详解

    C语言 function recursion函数递归详解

    递归指的是在函数的定义中使用函数自身的方法,举个例子: 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,循环下去
    2021-10-10
  • C语言中对字母进行大小写转换的简单方法

    C语言中对字母进行大小写转换的简单方法

    这篇文章主要介绍了C语言中对字母进行大小写转换的简单方法,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • 为什么说C语言是永不过时的语言

    为什么说C语言是永不过时的语言

    时隔5年,C语言再次领先Java,荣登TIOBE编程语言排行榜第一,那么C语言为何不会过时?你需要掌握多少种语言呢,感兴趣的朋友通过本文一起学习下吧
    2020-11-11

最新评论