C++ 二维数组 常见10种排序 常见7种查找

C++每天一题:二维数组中的查找

题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

调试结果

运行时间:12ms

占用内存:1504k:

知识点

知识点:二维数组(一位数组,多维数组)
参考 C++二维数组讲解、二维数组的声明和初始化
引用的图,简单看吧!楼主哪有那么多时间自己弄图啊!我又不做培训教育

/*
百度有的就不哔哔了!简述二维数组的转置、相加、相乘基本运算!好像百度都有啊!!!!这里多的是注释解释吧!!!
*/
//二维数组定义:知道行列表示就行了;a[M][N],M行,N列表示。
//二维数组初始化:int a[m][n];
//二(N)维数组运算:二维数组(矩阵),当然矩阵的运算:转置、相加、相乘基本操作。
//矩阵转置—————————————————
//其中A, B是m*n矩阵:
void tramat(matrix A,matrix B)
{ 
	int i,j;
	for(i=0; i<m; i++)//每一行
	for(j=0;j<n;j++)//每一列
	B[j]=A[j];//A[j]表示每一列的元素,当循环每一行的每一列便遍历了整个二维数组。
}
//矩阵相加————————————————
//其中A,B,C是m*n矩阵:
void addmat(matrix C, matrix A, matrix B)
{
	int i, j;
	for(i=0; i<m; i++)
	for(j=0;j<n;j++)
	c[j] = A[j] + B[j];
}
//矩阵相乘————————————————
//其中A,B,C是m*n矩阵:
void multmat(matrix C, matrix A, matrix B)
{
	int i, j;
	for(i=0; i<m; i++)
	for(j=0;j<n;j++)
	for(k = 0;k<m;k++)
	c[i][j] += A[i][k] * B[k][j];//A[I][K]:a行的每一个k列元素,B[i][k]:每一k列的i行元素——行列相乘
}
//数组间的转化 :2<—>N<—>1
//二维数组用途:

知识点:排序+查找
(个人理解:排序是所有元素的查找,查找是个别元素的排序;同样对数据集合中的元素进行以遍历为基础的操作。)

***********************************************排序 ************************************************
http://wenku.cyjzzd.com/a/137197##wk-more 常见10种排序 (常见的不到10种)
感谢博主的脑图(Xmind)有时间这几个排序C++实现以下!!应该没时间,直接看大佬博客吧!
———— 排序算法————
—— 比较类:
交互排序(冒泡排序、快速排序)
插入排序(简单插入排序、希尔排序)
选择排序(简单选择排序、堆排序)
归并排序(二路归并排序、多路归并排序)
——非比较类:
基数排序、计数排序、堆排序

这里会有排序代码的!!!

*********************************************查找 **********************************************
https://blog.csdn.net/deng_sai/article/details/77541214 常见7种查找方法
为什么那么多博客引用这个那?不废话!哔哔少!很干货,很全!
1、顺序查找
2、二分查找
3、插值查找
4、斐波那契查找
5、树表查找
6、分块查找
7、哈希查找

这里会有查找代码的

C++代码

//为啥没用什么高大上的方法? 行首元素和行内元素已经有序了,对行首元素使用一种排序?在对行内使用一种? 心累啊!鬼知道他有几个元素啊!
class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        //定义行列下标
        int m = array.size();
        int n = array[0].size();
        //遍历数组
        for(int i = 0;i<m;)
        {
            //以行为单位寻找target
          if(target>=array[i][0])//行首元素
            {
                for(int j = 0; j<n;)
                {
                    if(target == array[i][j])
                    {
                        return true;
                    }
                    j++;
                }
              
            }
           i++;
        }
        return false;
    }
};

总结

参考 如何写博客

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值