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++设计模式之模板方法模式(TemplateMethod)

    C++设计模式之模板方法模式(TemplateMethod)

    这篇文章主要为大家详细介绍了C++设计模式之模板方法模式TemplateMethod,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • c++实现逐行读取配置文件写入内存的示例

    c++实现逐行读取配置文件写入内存的示例

    这篇文章主要介绍了c++实现逐行读取配置文件写入内存的示例,需要的朋友可以参考下
    2014-05-05
  • 详解C++设计模式编程中建造者模式的实现

    详解C++设计模式编程中建造者模式的实现

    这篇文章主要介绍了C++设计模式编程中建造者模式的实现,建造者模式将一个复杂对象的构建于它的表现分离,可以减少代码冗余,需要的朋友可以参考下
    2016-03-03
  • C语言二分法求解方程根的两种方法

    C语言二分法求解方程根的两种方法

    这篇文章主要为大家详细介绍了C语言二分法求解方程根的两种方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • C++数据结构之list详解

    C++数据结构之list详解

    list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的
    2021-11-11
  • 浅谈C++指针(必看)

    浅谈C++指针(必看)

    下面小编就为大家带来一篇浅谈C++指针(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • C++字符串的截取问题

    C++字符串的截取问题

    这篇文章主要介绍了C++字符串的截取问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 详解windows下C/C++的内存泄露检测

    详解windows下C/C++的内存泄露检测

    C/C++由于其没有垃圾回收机制,所以内存的释放一直以来都依靠于程序员的手工释放,因此极其容易出现内存泄露的问题,而在比较大的程序之中,查找内存泄露是一件比较困难的事情,所以我们需要一些简便的方法来检测内存泄露,避免内存泄露导致设备崩溃
    2021-06-06
  • C语言实现扫雷OvO(完整代码)

    C语言实现扫雷OvO(完整代码)

    相信大家都玩过扫雷游戏,因为它太经典了,今天我们用C语言来模拟实现扫雷游戏,结合示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2022-04-04
  • C语言实现文件读写操作

    C语言实现文件读写操作

    这篇文章主要为大家详细介绍了C语言实现文件读写操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12

最新评论