问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

编写一个方法对二维数组排序,先按行排序,在按列排序

发布网友 发布时间:2022-05-10 16:23

我来回答

2个回答

懂视网 时间:2022-05-10 20:45

这篇文章主要介绍了Python实现二维数组按照某行或列排序的方法,结合具体实例形式分析了Python使用numpy模块的lexsort方法针对二维数组进行排序的常用操作技巧,需要的朋友可以参考下

本文实例讲述了Python实现二维数组按照某行或列排序的方法。分享给大家供大家参考,具体如下:

lexsort支持对数组按指定行或列的顺序排序;是间接排序,lexsort不修改原数组,返回索引。

(对应lexsort 一维数组的是argsort a.argsort()这么使用就可以;argsort也不修改原数组, 返回索引)

默认按最后一行元素有小到大排序, 返回最后一行元素排序后索引所在位置。

设数组a, 返回的索引ind,ind返回的是一维数组

对于一维数组, a[ind]就是排序后的数组。

对于二维数组下面会详细举例。

import numpy as np
>>> a
array([[ 2, 7, 4, 2],
 [35, 9, 1, 5],
 [22, 12, 3, 2]])

按最后一列顺序排序

>>> a[np.lexsort(a.T)]
array([[22, 12, 3, 2],
 [ 2, 7, 4, 2],
 [35, 9, 1, 5]])

按最后一列逆序排序

>>>a[np.lexsort(-a.T)]
array([[35, 9, 1, 5],
 [ 2, 7, 4, 2],
 [22, 12, 3, 2]])

按第一列顺序排序

>>> a[np.lexsort(a[:,::-1].T)]
array([[ 2, 7, 4, 2],
 [22, 12, 3, 2],
 [35, 9, 1, 5]])

按最后一行顺序排序

>>> a.T[np.lexsort(a)].T
array([[ 2, 4, 7, 2],
 [ 5, 1, 9, 35],
 [ 2, 3, 12, 22]])

按第一行顺序排序

>>> a.T[np.lexsort(a[::-1,:])].T
array([[ 2, 2, 4, 7],
 [ 5, 35, 1, 9],
 [ 2, 22, 3, 12]])

热心网友 时间:2022-05-10 17:53

在C语言中,二维数组按行存储,对每一行排序很方便,可以把每一行当成一个一维数组,使用排序函数直接进行排序。
然而对每一列进行排序,就不能直接当成一维数组进行排序。但是仍然可以把第j列a[0...M-1][j]在逻辑上当成一维数组进行排序,下面以使用冒泡排序为例对其排序。
对二维数组按列排序后,进一步展示了如何调用快速排序函数按行进行排序。
程序源码:
#include <stdio.h>
#include <stdlib.h>

#define M 3
#define N 3

//输出二维数组的函数
void print(int a[][N])
{
int i,j;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}

//qsort的cmp函数
int cmp(const void*a, const void *b)
{
return *(int*)a-*(int*)b;
}

int main(int argc, char* argv)
{

int a[M][N]={3,2,1,9,8,7,6,5,4};

printf("按列排序前的二维数组是:\n");
print(a);
printf("\n");
int j;
for(j=0;j<N;j++)//对每一列进行升序排序
{
//对第j列进行排序
int m,n;
int t;
for(m=M-1;m>0;m--)
{
for(n=0;n<m;n++)
{
if(a[n][j]>a[n+1][j])
{
t=a[n][j];
a[n][j]=a[n+1][j];
a[n+1][j]=t;
}
}
}
}
printf("按列排序后二维数组变为:\n");
print(a);
printf("\n");

//对按列排序后的二维数组按行升序排序 (调用快速排序函数)

int i;
for(i=0;i<M;i++)
{
qsort(a[i],N,sizeof(a[i][0]),cmp);
}

printf("按列排序后再按行排序后二维数组变为:\n");
print(a);
printf("\n");
system("pause");
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
深圳旅游不只有世界之窗,这8个必打卡景点,惊艳绝伦游玩首选 ...什么来划分? 我国对社会阶层研究状况?把我国社会划分为几个阶层... 坐井观天 成语 衣服最小尺码是多少 最近在330和奔驰C之间纠结,有些关于贷款的问题想问问? E浏览器如何截屏网页 微信一个IP只能投一次票吗,请问有什么办法能多投一些票吗? 桑浦山桑浦山八景 嫂子屋门口的鞋的txt全集下载地址 枕月入眠是什么意思 步步高vivox501是什么配置的 步步高K202山寨直板手机下载QQ浏览器 步步高直板手机都哪几款是钢化玻璃的? 直板的步步高音乐手机,有哪些型号 步步高直板手机有哪些要说出型号和特点啊。按键要好的 和巨蟹座的女生分手后,还有可能复合吗? 和巨蟹座男生分手了怎么挽回 如果和巨蟹座的女生闹分手,你觉得再次复合很难吗? 请问一下OPPO Find7有智能休眠功能吗? oppofind7玩游戏常常碰到关机健怎么办 oppofind7发热耗电快 是哪出现问题了? 和巨蟹座男分手了 怎么才能和好 oppofind7上那个不打开手机壳接电话的方框屏幕,背景怎么换 oppofind7翻盖手机壳要不翻盖直接接电话怎么设置 怎么跟巨蟹座复合呢? 为什么oppoFind7合上手机套后不显示时间都要重启后盖上才会显示时间 oppo find7我的手机壳只有上面一个视窗,怎么让接听通话的按键调到上面。 为啥淘宝没卖oppo find7?只有一些配件贴膜手机壳之类的。 oppofind5find7手机壳能不能共用一个 oppo find7的什么手机壳个性又性价比高 松下XQB55--8535型全自动洗衣机洗衣不转为何因?脱水正常,洗衣时进水不停,洗衣不转。(排水管有泄水现象 弹弹堂怎么升级最快提升战斗力最快 一个房子有多少面积是怎么算出来的? 怎样才能把全民k歌自己唱的设置为手机铃声 房屋面积怎么算? 房产证注明房屋面积应该如何计算? 怎么样计算房子的面积? 弹弹堂如何提升战斗力 新弹弹堂如何快速提高战斗力 弹弹堂怎么快速提升战斗力? 数据中心机房环境监控厂家哪家好? 弹弹堂怎么提升战斗力 书法“蛇”的不同写法 自己设计字体样式,蛋糕、冰淇淋、蛇、马、心碎、情人,春节、游泳、男女、七度空间,这些词 当今时代的社会到底在朝个什么方向发展? 蛇字的甲骨文怎么写 千年文献,一千年前小朋友写的字被曝光,小朋友的字体现了什么? 这款的蛇字为什么没有 蛇字加一笔是什么字 如何看待当今社会得发展变化?从各个方面帮忙解答下