矩阵的排序

在一个m*n矩阵中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,按从小到大的顺序打印这个矩阵到一个一维数组中。如图,则应打印出

1,2,2,4,4,6,7,8,8,9,9,10,11,12,13,15.

思路:

如果把它想成 合并m个大小为n的数组,那么思路将会很简单。

但是,矩阵的m和n为随机值,所以并不能想很简单的那种合并。

假如我们定义一个大小为m的数组s,他的下表对应矩阵不同的行,

对应的值我们保存当前矩阵遍历到的位置,由于不同行是经过排序的,

所以我们只需要找出m行里最小的元素,放到指定数组,即可实现排序。

例如:

第一次 从1 2 4 6里找到最小的1,此时第一行的第一个元素已经遍历,所以我们定义的数组s,对应的s[0]+=1,表示下一个遍历的位置在1.

代码

int * Sort(int ar[][4],int m,int n)
{
    int *ret = (int *)malloc(sizeof(int)*m*n); //保存结果的数组
    int *s = (int *)malloc(sizeof(int)*n);//保存当前遍历位置
    memset(s, 0, sizeof(int)*n);//初始化为0

    for (int i=0; i < m*n; i++)
    {
        int min=0;//保存最小值在第几行
        while (s[min] == n)min++;//如果当前行全部遍历完了则不需要判断了

        for (int l = min+1; l < m; l++)
        {
            if (ar[min][s[min]] > ar[l][s[l]])
            {
                min = l;//更新min位置
            }
        }
        ret[i] = ar[min][s[min]];//保存结果
        s[min]++;       // 遍历位置更新
    }
    free(s);//内存释放
    return ret;
}

运行结果

时间: 2024-10-05 09:20:41

矩阵的排序的相关文章

算法初级面试题03——队列实现栈、栈实现队列、转圈打印矩阵、旋转矩阵、反转链表、之字打印矩阵、排序矩阵中找数

第一部分主要讨论:栈.队列.数组矩阵相关的面试题 题目一 用数组结构实现大小固定的队列和栈 public static class ArrayStack { private Integer[] arr; private Integer size; public ArrayStack(int initSize) { if (initSize < 0) { throw new IllegalArgumentException("The init size is less than 0"

Magnostics Image-based Search of Interesting Matrix Views for Guided Network Exploration(一种基于网络信息矩阵图像的网络探索方法)

网络.关系等数据变成如图的邻接矩阵时(红色代表两个节点也就是人,之间有联系),但是得到的矩阵会因为顺序的问题而出现不同的排列方式,在第一种中会发现因为有聚集的块状区域而很容易地把数据分为两个部分,然后根据数据的具体含义而得知其代表的意思,在此图中可以看出是两个集团. 当分析数据时候,把它转换成矩阵的形式,并运用一些矩阵重排序算法将矩阵变形,变成特定的图案pattern.而现在希望基于图像来查询哪些变形好的矩阵属于同一种pattern. 当前的数据量特别大,数据维度特别多,样式复杂多变,对于探测特

numpy中的matrix矩阵处理

numpy模块中的矩阵对象为numpy.matrix,包括矩阵数据的处理,矩阵的计算,以及基本的统计功能,转置,可逆性等等,包括对复数的处理,均在matrix对象中. class numpy.matrix(data,dtype,copy):返回一个矩阵,其中data为ndarray对象或者字符形式:dtype:为data的type:copy:为bool类型. >>> a = np.matrix('1 2 7; 3 4 8; 5 6 9') >>> a          

R,让数据针对某列进行排序

引自:http://cos.name/cn/topic/104496/ 我们可能经常想根据某一列或者某两列来对矩阵进行排序,在R中可以使用order函数来实现这一点 假设数据集为a,针对第七列从小到大进行排序,命令如下: a[order(a$V7),] 如果想要查看前几行的话,使用: head(a[order(a$V7),]) 如果想以按照第七列从小到大,如果第七列一样,按照第八列从大到小排列,可以使用如下命令: a[order(a$V7,-a$V8),]

python小白之矩阵matrix笔记(updating)

Matrix #python学习之矩阵matrix 2018.4.18 # -*- coding: UTF-8 -*- from numpy import * import numpy as np import math a=np.matrix('1 2 7;3 4 8;5 6 9')#矩阵的换行必须使用分号隔开,内部数据必须为字符串形式,元素之间必须以空格隔开 print(np.matrix([[1,2],[3,4]])) m=np.asmatrix(a)#将输入的a解释为矩阵m,并修改m中某

Opencv研读笔记:haartraining程序之icvCreateCARTStageClassifier函数详解~

之前介绍了haartraining程序中的cvCreateMTStumpClassifier函数,这个函数的功能是计算最优弱分类器,这篇文章介绍一下自己对haartraining中关于强分类器计算的一些理解,也就是程序中的icvCreateCARTStageClassifier函数. 由于haartraining是基于HAAR特征进行adaboost训练,对于HAAR特征的处理比较繁琐,采用了奇数弱分类器补充针对翻转特征最优弱分类器计算的代码,所以代码看起来较为冗长.此外,其采用了较多的中间结构

《Python数据分析常用手册》一、NumPy和Pandas篇

一.常用链接: 1.Python官网:https://www.python.org/ 2.各种库的whl离线安装包:http://www.lfd.uci.edu/~gohlke/pythonlibs/#scikit-learn 3.数据分析常用库的离线安装包(pip+wheels)(百度云):http://pan.baidu.com/s/1dEMXbfN 密码:bbs2 二.常用库 1.NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和

Python-NumPy

网上查到的个人认为最简洁的大纲,如果你有Python基础,又有些数学基础,看这个就够了.看不懂的地方敲一遍,这篇文章能告诉我们numpy是什么.它能做什么.怎么做. NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对整组数据进行快速运算的标准数学函数(无需编写循环). 用于读写磁盘数据的工具以及用于操作内存映射文件的工具. 线性代数.随机数生成以及傅里叶变换功能. 用于集成C.C++.Fo

2016.08互金平台移动端影响力50强

2015年,也被称为互联网金融移动化的元年,强化移动端的竞争力已成为互联网金融平台的重要战略之一. 以最活跃的P2P网贷领域为例,根据网贷之家.盈灿咨询的投资者调研及主要平台的数据显示,在2015年末移动端的成交量正在超越PC端,甚至行业内已经出现纯移动端的平台. 对于互金平台来讲,移动端具有用户体验好.沟通效率高.数据获取更准确等优势,各家平台也充分认识到这一点,通过多种渠道强化移动端的影响力. 基于此,盈灿咨询通过监测互金平台的微信公众号.平台APP.平台微博.新闻客户端.QQ群等常见移动端