news 2026/4/25 2:02:24

C语言实现杨氏3X3矩阵(附带源码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言实现杨氏3X3矩阵(附带源码)

一、项目背景详细介绍

在算法与数据结构学习过程中,特殊矩阵结构是一类非常重要但又容易被忽视的内容。常见的如对称矩阵、稀疏矩阵、上三角矩阵等,而杨氏矩阵(Young Matrix,又称杨氏表、Young Tableau)则属于一种有序矩阵结构,在查找、排序、堆思想理解等方面具有极高的教学价值。

杨氏矩阵最早源于组合数学中的 Young Tableaux,但在计算机科学中,通常指满足以下性质的二维矩阵:

  • 每一行从左到右递增

  • 每一列从上到下递增

这种矩阵结构在算法题中非常常见,尤其用于:

  • 二维有序数据的快速查找

  • 理解“从右上角或左下角开始搜索”的思想

  • 为后续学习二维搜索、堆的推广、矩阵算法打基础

在初学 C 语言或数据结构阶段,引入一个3×3 的杨氏矩阵,可以:

  • 降低理解难度

  • 清晰演示矩阵性质

  • 便于手算与调试

  • 非常适合课堂与博客教学

因此,本项目的目标是:
使用 C 语言完整实现一个 3×3 的杨氏矩阵,并演示其核心操作 —— 查找元素。


二、项目需求详细介绍

本项目围绕3×3 杨氏矩阵,具体需求如下:

1️⃣ 基本矩阵要求

  • 使用一个3 行 3 列的二维数组

  • 矩阵满足:

    • 行递增

    • 列递增

示例矩阵(合法的杨氏矩阵):

1 4 7 2 5 8 3 6 9

2️⃣ 功能需求

(1)初始化杨氏矩阵

  • 在程序中定义并初始化一个合法的 3×3 杨氏矩阵

  • 所有元素为整数

(2)打印矩阵

  • 以行列形式清晰输出矩阵内容

  • 方便观察矩阵结构

(3)在杨氏矩阵中查找指定元素

  • 给定一个整数key

  • 判断该元素是否存在于矩阵中

  • 若存在:

    • 输出其行号与列号

  • 若不存在:

    • 给出明确提示

(4)查找算法要求

  • 不得暴力遍历整个矩阵

  • 必须利用杨氏矩阵“行列递增”的特性

  • 时间复杂度优于 O(n²)


三、相关技术详细介绍

1️⃣ 二维数组(C 语言)

在 C 语言中,二维数组的本质是:

int arr[3][3];

  • 行优先存储

  • 可通过arr[i][j]访问元素

  • 非常适合表示矩阵结构


2️⃣ 杨氏矩阵的核心性质

杨氏矩阵满足两个关键条件:

  1. 行递增
    对于任意一行:

    arr[i][0] < arr[i][1] < arr[i][2]

  2. 列递增
    对于任意一列:

    arr[0][j] < arr[1][j] < arr[2][j]


3️⃣ 杨氏矩阵的查找思想(重点)

为什么不能随便从某个位置找?

如果从左上角开始:

  • 只能确定右边更大

  • 下边更大

  • 无法判断往哪走

正确的查找起点

👉右上角(0, cols-1)左下角(rows-1, 0)

右上角为例:

  • 当前值 > key → 向左移动

  • 当前值 < key → 向下移动

  • 相等 → 找到

这样每一步都能排除一整行或一整列

时间复杂度:
O(行数 + 列数)
对于 3×3,即最多 6 步


四、实现思路详细介绍

1️⃣ 总体思路

  1. 定义一个 3×3 的二维数组作为杨氏矩阵

  2. 编写函数打印矩阵

  3. 编写函数在杨氏矩阵中查找元素

  4. main函数中:

    • 调用打印函数

    • 查找多个示例数据

    • 验证结果


2️⃣ 查找算法流程(右上角法)

假设当前位置(row, col)

  1. 初始位置:

    row = 0 col = 2

  2. 循环条件:

    row < 3 && col >= 0

  3. 比较:

    • arr[row][col] == key→ 找到

    • arr[row][col] > keycol--

    • arr[row][col] < keyrow++

  4. 循环结束仍未找到 → 不存在


五、完整实现代码

#include <stdio.h> /* =============================== 功能:打印 3x3 杨氏矩阵 =============================== */ void printMatrix(int matrix[3][3]) { int i, j; printf("当前杨氏矩阵内容:\n"); for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { printf("%3d ", matrix[i][j]); } printf("\n"); } } /* ========================================= 功能:在 3x3 杨氏矩阵中查找指定元素 参数: matrix - 杨氏矩阵 key - 要查找的值 返回: 找到返回 1,未找到返回 0 ========================================= */ int findInYoungMatrix(int matrix[3][3], int key) { int row = 0; // 从右上角开始 int col = 2; while (row < 3 && col >= 0) { if (matrix[row][col] == key) { printf("找到元素 %d,位置为:(%d, %d)\n", key, row, col); return 1; } else if (matrix[row][col] > key) { col--; // 当前值过大,向左移动 } else { row++; // 当前值过小,向下移动 } } printf("未找到元素 %d\n", key); return 0; } /* =============================== 主函数 =============================== */ int main() { /* 定义并初始化一个合法的 3x3 杨氏矩阵 */ int youngMatrix[3][3] = { {1, 4, 7}, {2, 5, 8}, {3, 6, 9} }; printMatrix(youngMatrix); printf("\n查找示例:\n"); findInYoungMatrix(youngMatrix, 5); findInYoungMatrix(youngMatrix, 6); findInYoungMatrix(youngMatrix, 10); return 0; }

六、代码详细解读

1️⃣printMatrix

  • 用于输出 3×3 杨氏矩阵

  • 双重循环逐行逐列打印

  • 帮助直观观察矩阵结构


2️⃣findInYoungMatrix

  • 利用杨氏矩阵“行列递增”特性

  • 从右上角开始查找

  • 每一步都能排除一行或一列

  • 查找效率远高于暴力遍历


3️⃣main

  • 初始化一个标准的 3×3 杨氏矩阵

  • 测试多种查找情况:

    • 存在的元素

    • 不存在的元素

  • 验证算法正确性


七、项目详细总结

通过本项目,我们完成了:

✅ 使用 C 语言构建 3×3 杨氏矩阵
✅ 深入理解杨氏矩阵的结构特点
✅ 掌握二维有序矩阵的高效查找算法
✅ 为后续学习二维搜索、矩阵算法、堆结构打下基础

3×3 的规模虽小,但思想非常重要,是从“一维有序”迈向“二维有序”的关键一步。


八、项目常见问题及解答

Q1:为什么一定从右上角开始?

因为右上角元素:

  • 左边都比它小

  • 下边都比它大
    可以一次性排除一整行或一整列


Q2:能从左下角开始吗?

可以,逻辑完全对称:

  • 当前值 > key → 向上

  • 当前值 < key → 向右


Q3:这是二分查找吗?

不是。
这是二维有序矩阵查找算法,思想类似二分,但不是真正的二分查找。


九、扩展方向与性能优化

1️⃣ 将 3×3 扩展为n×m 杨氏矩阵
2️⃣ 封装成通用库函数
3️⃣ 支持动态输入矩阵
4️⃣ 结合算法题(如 LeetCode / 剑指 Offer)
5️⃣ 探索杨氏矩阵与堆结构的联系

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 15:31:43

C语言实现猜数字游戏(附带源码)

一、项目背景详细介绍在程序设计入门阶段&#xff0c;小游戏类项目是最容易激发学习兴趣、也是最适合综合训练基础知识的实践题型。其中&#xff0c;**“猜数字游戏”**几乎是所有编程语言教学中的经典案例。所谓猜数字游戏&#xff0c;指的是&#xff1a;程序随机生成一个整数…

作者头像 李华
网站建设 2026/4/23 12:43:57

python-uniapp小程序烩面店餐饮饭馆餐桌预订点餐系统的设计与实现_oa17g41j

文章目录系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统截图 python-uniapp_oa7给1j 小程序烩面店餐饮饭馆餐桌预订点餐系统的设计与实现 项目技术简介 …

作者头像 李华
网站建设 2026/4/22 13:30:02

【Java毕设源码分享】基于springboot+vue的火锅文化网站的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/20 14:11:57

python-uniapp微信小程序的教师排课系统_rv98tluz

文章目录系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统截图 python-uniapp_rv98tluz 微信小程序的教师排课系统 项目技术简介 Python版本&#xff1a;p…

作者头像 李华
网站建设 2026/4/24 5:27:53

GPU的集体运算是如何工作的

GPU 可以执行与 TPU 相同的集合操作&#xff1a;ReduceScatter、AllGathers、AllReduces 和 AllToAlls。与 TPU 不同的是&#xff0c;这些操作的工作方式会根据执行位置的不同而有所差异&#xff1a;是在节点级别&#xff08;通过 NVLink&#xff09;还是在更高级别&#xff08…

作者头像 李华
网站建设 2026/4/23 13:06:04

如何将工业机器人精度提升300%?揭秘顶级工厂不愿公开的7项调校技术

第一章&#xff1a;工业机器人Agent精度的核心定义与行业标准工业机器人在现代智能制造中扮演着关键角色&#xff0c;其执行任务的准确性直接依赖于“Agent精度”这一核心性能指标。此处的Agent并非传统软件代理&#xff0c;而是指集成感知、决策与控制能力的智能控制单元&…

作者头像 李华