如何将二维数组排序
发布网友
发布时间:2022-04-18 15:26
我来回答
共5个回答
懂视网
时间:2022-04-18 19:47
这篇文章主要介绍了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-04-18 16:55
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 二维排序
{
class Program
{
static void Main(string[] args)
{
int[,] arr= new int[,] { { 4, 78, 5 }, { 34, 7, 15 }, { 14, 8, 55 },{55,12, 9} };
int i,j,k,l,temp;
for (i=0;i<4;i++)//一维数组内部排序。冒泡。
{
for (j = 0; j < 2; j++)
{
for (k = j; k < 3; k++)
{
if (arr[i, j] < arr[i, k])
{
temp = arr[i, j];
arr[i, j] = arr[i, k];
arr[i, k] = temp;
}
}
}
}
for (i = 0; i < 3; i++)//将有序的一维数组作为元素的一维数组排序。也是冒泡。。
for (j = i; j < 4; j++)
{
k=0;
while ((k < 2) && (arr[i, k] == arr[j, k])) k++;
if (arr[i, k] < arr[j, k])
{
for (l = 0; l < 3; l++)
{
temp = arr[i, l];
arr[i, l] = arr[j, l];
arr[j, l] = temp;
}
}
}
for (i = 0; i < 4; i++)
{
for (j = 0; j < 3; j++)
Console.Write("{0} ", arr[i, j]);
Console.WriteLine();
}
Console.ReadKey();
}
}
}
嘿嘿。。有啥看不懂的可以问我。。
热心网友
时间:2022-04-18 18:13
#include <stdio.h>
#define iline 2//行。fun3()中用
#define irow 8//列。fun3()中用
/***************************
例子中:
以字符数组为例。
以冒泡排序为排序方法。
----************************/
//第一种方法:将二维数组转置到一维数组,再对一维数组排序
void fun1()
{
int i=0,j=0,k=0,t=0;
char a[2][8]={"1354689","3456378"};
char b[2*8];
printf("fun1()运行如下:\n");
//将二维数组转置到一维数组
while(i<2)
{
while(j<8-1)
{
b[k++]=a[i][j];
j++;
}
i++;
j=0;
}
b[k]='\0';//最后一个
puts(b);//先看看是不是成功转置
//以下比较容易理解的冒泡排序,一个个比较,交换。不过效率较低
for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
if(b[i]>b[j])//从大到小排序,若要从小到大,你懂的。
{
//交换二者的值
t=b[i];
b[i]=b[j];
b[j]=t;
}
}
}
puts(b);//输出看看结果
}
void fun2()//fun3是fun2的通用版本
{
int i=0,j=0;
char t;
char a[2][8]={"1354689","3456378"};
printf("\nfun2()运行如下:\n");
for(i=0;i<2*8;i++)
{
for(j=0;j<2*8;j++)
{
if(i==(i/8+1)*8-1 || j==(j/8+1)*8-1)
{
//什么都不做
}
else
{
if(a[i/8][i%8]>a[j/8][j%8])
{
t=a[i/8][i%8];
a[i/8][i%8]=a[j/8][j%8];
a[j/8][j%8]=t;
}
}
}
}
i=0;
while(i<2)
{
puts(a[i]);
i++;
}
}
void fun3()
{
int i=0,j=0;
char t;
char a[iline][irow]={"1354689","3456378"};
printf("\nfun3()运行如下:\n");
for(i=0;i<iline*irow;i++)
{
for(j=0;j<iline*irow;j++)
{
if(i==(i/irow+1)*irow-1 || j==(j/irow+1)*irow-1)//还是要注意每行结尾的\0.
{
//什么都不做
}
else
{
if(a[i/irow][i%irow]>a[j/irow][j%irow])
{
t=a[i/irow][i%irow];
a[i/irow][i%irow]=a[j/irow][j%irow];
a[j/irow][j%irow]=t;
}
}
}
}
i=0;
while(i<2)
{
puts(a[i]);
i++;
}
}
int main()
{
fun1();//法一:将二维数组转成一维数组来做
fun2();//法二:直接对二维数组排序
fun3();//法二的通用版。不过这里数组是两行的,要对应哦。
//当然,这里也可以用更通用地用传参的方式将传入数组a[][irow].这些就自己想咯。
return 0;
}
当然,整型,浮点型的排序也是这样。
热心网友
时间:2022-04-18 19:48
你首先先针对每一行进行排序,利用嵌套循环,比如(4,78,5)进行循环排序,然后再在另一个维度上,对每一行根据最大值排序,这是我唯一能想到的办法了。
热心网友
时间:2022-04-18 21:39
要C++版本的吗?
php二维数组排序方法
选择排序:选择排序每次从未排序的元素中找出最小的元素,存放到已排序序列的末尾。这种方法也比较适合对二维数组的特定列进行排序。array_multisort函数:这是PHP内置的一个函数,可以对一个或多个数组进行排序。如果应用在二维数组的排序上,可以依据数组中的特定值来排序二维数组的元素。这是一个效率较高...
二维数组如何进行排序?
若二维数组a有m列,则计算任一元素a[i][j]在数组中任意位置的公式为:a[i][j] =a+(i-1)*m+j =a[0][0]+(i-1)*m+j。二维数组中的元素是通过使用下标(即数组的行索引和列索引)来访问的。例如:a[2][3]将获取数组中第 3 行第 4 个元素。a[i][j]将获取数组中第 i+1 行...
PHP如何对二维数组(多维数组)进排序
PHP还提供了其他多种方式对二维数组进行排序,包括但不限于:使用usort()函数:usort()允许自定义排序函数,你可以根据特定的键或值来编写排序逻辑。利用array_multisort()的多键排序功能:此函数不仅支持单键排序,还能同时对多个键进行排序。处理字符大小写转换:如果需要将字符转为小写后进行排序,可结...
python 二维数组排序
在上面的代码中,我们首先创建一个3x3的二维数组arr。然后,我们使用列表推导式和sorted()函数对每个子列表进行排序,得到一个新的二维数组sorted_arr。最后,我们使用print()函数将sorted_arr打印到控制台上。请注意,上面的代码中,我们使用了sorted()函数的默认参数,即按照元素的大小进行升序排序。如果...
C语言 如何对二维数组进行按列排序?
在C语言中,二维数组按行存储,对每一行排序很方便,可以把每一行当成一个一维数组,使用排序函数直接进行排序。然而对每一列进行排序,就不能直接当成一维数组进行排序。但是仍然可以把第j列a[0...M-1][j]在逻辑上当成一维数组进行排序,下面以使用冒泡排序为例对其排序。对二维数组按列排序后,...
C语言 如何对二维数组进行按列排序?
无论是多少维的数组,机内都是一维的,以行优先存放。所以直接降为一维数组排序最方便省事。下面以二维数组为例写出代码——include "stdio.h"int main(int argc,char *argv[]){int x[3][3]={{9,4,3},{6,2,7},{5,8,1}},i,j,k,*p;printf("Before ordering is as follows:\n");...
matlab如何对二维数组排序
每个对象是一个2*1的数对,你可以先为每个数对添加一个键值,形成一个键值数组。比方说你的方案里面x的优先级是比y大的,键值不妨设计成x*1000+y(如果y不大于1000的话,如果y更大调整一下就行了),这样你对键值先用sort排序,获取索引表之后,用索引来重组要排序的对象。
java二维数组只对每行的数据进行排序
你可以把二维数组理解成普通的一维数组,只不过这个一维数组的每一个元素又是一个数组。像遍历普通数组那样遍历二维数组的行,这样就得到了每一行的数组,然后排序。ok
求教c语言二维数组的冒泡排序法?
1、打开Visual Studio工具并创建一个新的Win32程序。2、在打开的C语言文件中,导入stdio.h空间,然后准备一个main函数。3、接下来,准备一个需要进行冒泡排序的整数数组。如下图所示,数组中数字的顺序是不正常的。4、接下来,准备变量,准备好的变量用于对交互数据进行排序。5、然后我们准备两个for循环...
Delphi 二维数组怎么排序
begin a[1999]:=28;a[2000]:=28;明白了没,你的例子里面1..2表示第一维下标为1、2两个,请参照PASCAL书的子界类型篇幅。补充:佩服呀,一维护都明白了,二维不明白,这个要求不是举一反三,只是举一反二~~~下面定义的二维护数组:var a:array [1..10,1..5] of integer;i,j:intege...