首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在c#中对2D整型数组进行排序

如何在c#中对2D整型数组进行排序
EN

Stack Overflow用户
提问于 2016-12-22 23:28:28
回答 2查看 316关注 0票数 0

我刚刚启动了c#,并找到了一个练习,该练习要求在不使用其他数组的情况下从小到大对数组中的数字进行排序,或者将其更改为一维数组。这就是我所做的,但它不起作用

代码语言:javascript
运行
AI代码解释
复制
     for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                Min = test[i, j];
                int o = 0;
                lign = i;
                col = j;
                for (int h = i; h < 3; h++)
                {

                    for (int z = j; z < 4; z++)
                    {
                        if (test[h, z] < Min)
                        {
                            Min = test[h, z];
                            lign = h;
                            col = z;
                            o = 1;
                        }
                    }
                }
                if (o == 1)
                {
                    temp = test[i, j];
                    test[i, j] = test[lign, col];
                    test[lign, col] = temp;
                }

            }
        }
EN

回答 2

Stack Overflow用户

发布于 2016-12-23 00:21:59

这应该能起到作用:

代码语言:javascript
运行
AI代码解释
复制
public int[,] Sort2DArray(int[,] input)
{
    int[] tempArray = new int[input.Length];
    Buffer.BlockCopy(input, 0, tempArray, 0, tempArray.Length * sizeof(int));

    Array.Sort(tempArray);

    int[,] output = new int[input.GetLength(0), input.GetLength(1)];
    Buffer.BlockCopy(tempArray, 0, output, 0, tempArray.Length * sizeof(int));

    return output;
}

Buffer.BlockCopy调用负责从二维数组到一维数组的转换,反之亦然。一旦将数组转换为一维,排序就很简单了。

票数 1
EN

Stack Overflow用户

发布于 2016-12-23 00:05:39

根据你的评论,我想对二维数组进行完全排序(而不是逐行排序)。

你必须像对待一维数组一样来处理你的二维数组。我使用的排序算法是简单的冒泡排序。但同样的逻辑也可以用于一些更快的算法,如快速排序

诀窍是将一维索引转换为二维索引。下面是根据列长度从一维索引中获取行和列的简单扩展方法。

代码语言:javascript
运行
AI代码解释
复制
/// <summary>
/// Calculates row and column index from given linear index and column length.
/// </summary>
/// <param name="index1D">linear index</param>
/// <param name="collength">column length</param>
/// <param name="row">returns index of row.</param>
/// <param name="col">returns index of column.</param>
public static void Get2DIndex(int index1D, int collength, out int row, out int col)
{
    row = index1D % collength;
    col = index1D / collength;
}

现在你要做的就是像普通数组一样迭代二维数组。您有一维索引,并使用Get2DIndex计算行和列

您有两个for循环来执行冒泡排序。

代码语言:javascript
运行
AI代码解释
复制
int[,] test = new int[4, 3]
{
    {45, 23, 9},
    {3, -4, -134},
    {67, 53, 32},
    {0, 1, 0}
};

// test.GetLength(n) will give the length at nth dimension.
// test.Length will give total length. (4*3)

var colLength = test.GetLength(1);

for (int i = 0; i < test.Length - 1; i++)
{
    for (int j = i + 1; j < test.Length; j++)
    {
        int row1, col1; // for first item
        int row2, col2; // next item

        Get2DIndex(i, colLength, out row1, out col1); // calculate indexes for first item

        Get2DIndex(j, colLength, out row2, out col2); // calculate indexes for next item

        if (test[col2, row2] < test[col1, row1]) // simple swap
        {
            var temp = test[col2, row2];
            test[col2, row2] = test[col1, row1];
            test[col1, row1] = temp;
        }
    }
}

打印结果:

代码语言:javascript
运行
AI代码解释
复制
for (int i = 0; i < test.GetLength(0); i++)
{
    for (int j = 0; j < test.GetLength(1); j++)
    {
        Console.Write("{0}\t", test[i, j]);
    }
    Console.WriteLine();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41293137

复制
相关文章
安装Termux的手机上运行Python
Android是一个单用户图形化系统,功能主要以应用的形式呈现给用户,因此在系统上我们无法直接获取终端,更是无法直接调用系统自带的丰富指令。使用ADB是一个曲线救国的方法,打开USB调试后开发者可以在桌面系统的终端中触发Android系统自带指令,使用方法大概如下:
JQ实验室
2022/02/09
5.2K0
安装Termux的手机上运行Python
三星用户注意,黑客可能在你手机上悄悄装APP
The Hacker News 网站披露,三星 Galaxy Store 中披露一个现已修复的安全漏洞,该漏洞可能会触发受影响手机上的远程命令执行。
FB客服
2022/11/14
5240
三星用户注意,黑客可能在你手机上悄悄装APP
三星对DeX上Linux系统的支持失败
在上周给Beta测试人员的一封电子邮件中,三星表示将不支持其Linux on DeX beta程序用于将来的操作系统和设备版本。
shellmik
2019/12/23
2.4K0
三星对DeX上Linux系统的支持失败
初体验三星手机系统Bada应用开发
前天三星就发布Bada的SDK以及IDE了,我今天赶紧试了试,看看有没有值得学习的东西,我体验的环境是:32位Windows 7 Enterprise版OS,处理器是Core2 Duo E7400,RAM是2G。
全栈程序员站长
2022/07/04
5840
初体验三星手机系统Bada应用开发
Linux发行版:CentOS、Ubuntu、RedHat、Android、Tizen、MeeGo
Linux,最早由Linus Benedict Torvalds在1991年开始编写。在这之前,Richard Stallman创建了Free Software Foundation(FSF)组织以及GNU项目,并不断的编写创建GNU程序(此类程序的许可方式均为GPL: General Public License)。在不断的有杰出的程序员和开发者加入到GNU组织中后,便造就了今天我们所看到的Linux,或称GNU/Linux。 Linux的发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本
阳光岛主
2019/02/19
18.9K0
Linux发行版:CentOS、Ubuntu、RedHat、Android、Tizen、MeeGo
智能手机操作系统混战:看似扑朔迷离实则大局已定
基于昨天的Super快报,Super昨晚赶制了一篇博文(弄到2点早晨飞机误点了),明天虎嗅会发。因今天在北京出差,没时间整理Super快报,就先发这篇文章给大家过目吧。 ————————我是分割线——————— PC操作系统经过一战后,已形成WINDOWS绝对垄断,MAC OS独居一隅和开源系统占有极少用户的局面。智能手机操作系统市场,现在Android和IOS已形成双寡头,瓜分了90%以上的市场。 新年伊始,三星可能推出操作系统的消息将智能手机操作系统混战带入更加扑朔迷
罗超频道
2018/04/17
1.1K0
怎么安装 VMware 运行 Ubuntu?
在线课堂:https://www.100ask.net/index(课程观看) 论  坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taobao.com/ (淘宝) https://weidongshan.tmall.com/(天猫)
韦东山
2022/12/28
1.9K0
怎么安装 VMware 运行 Ubuntu?
安卓生态“乱糟糟”成围城
导读:黄章魅族说安卓乱糟糟的,可能会放弃安卓,即将推出搭载Ubuntu的MX3,而诺基亚则正要进入安卓阵营,安卓生态宛如围城,外面的人想进来,里面的人想出去。 魅族董事长黄章复出后出尽风头。新浪微博注册一天,粉丝涨到10万,第一条微博便表示“要让更多人知道小米之外还有更好的魅族手机可以选择”,向小米宣战。有人说,黄章开局不错。先是董明珠女士考察魅族的照片被传出,引发资本合作猜想,再是魅族内部讨论的智能手表原型图漏出,魅族将去手机化。看上去魅族要大干一场。 扰乱节奏的事情发生了。 一、
罗超频道
2018/04/28
7980
安卓生态“乱糟糟”成围城
Ubuntu 安装 Minecraft 我的世界
Minecraft是一款自由度很高的沙盒游戏,《我的世界》、《当个创世神》、《麦块》、《我的手艺》等仅为非官方中文译名。并可以跨平台运行(Windows Linux Mac)。下面介绍下在Ubuntu 安装 Minecraft 我的世界的过程。
知忆
2021/06/22
1.7K0
冷月手撕408之操作系统(4)-操作系统的运行环境
操作系统的运行环境主要是介绍了操作系统中处理机的运行状态以及OS的内核组成、中断和异常、系统调用。
学长冷月
2021/02/22
2580
冷月手撕408之操作系统(4)-操作系统的运行环境
手机操作系统的沉浮往事(下)
这一年的1月9日,在Macworld 2007大会上,史蒂夫·乔布斯正式发布了第一代iPhone。
鲜枣课堂
2023/08/21
2520
手机操作系统的沉浮往事(下)
新手安装Ubuntu 16.04 操作系统
这一步相对简单,网络上面有很多的链接下载。这里贴一个ubuntu的官方网站链接,可以下载到ubuntu 16.04的iso文件
全栈程序员站长
2022/08/22
1.6K0
新手安装Ubuntu 16.04 操作系统
Ubuntu操作系统的安装与卸载命令
VMware Workstation-->虚拟机-->设置-->硬件-->硬盘-->添加
用户5005176
2021/08/25
7940
电脑不香吗?我在手机上装Python我图什么?
Python Any Where!Python可以在我们的电脑上,当然也可以在我的手机上。
博文视点Broadview
2020/06/11
1.1K0
在UBUNTU虚拟机上安装R软件包
原文链接:http://tecdat.cn/?p=14174 使用Ubuntu 虚拟机。安装某些软件包时可能会出现一些问题。一个窍门是打开终端 然后使用sudo命令安装一些软件包, (输入密码后)。只
拓端
2020/08/05
1.2K0
ubuntu 安装 Ruby, Rails 运行环境
或者可以安装 1.8.7 版本,也可以是 1.9.3,只要将后面的版本号跟换一下就可以了 同样继续等待漫长的下载,编译过程,完成以后,Ruby, Ruby Gems 就安装好了。 步骤3 - 设置 Ruby 版本
零式的天空
2022/03/02
1.7K0
ubuntu安装超详细教程_执手锁怎么安装
前几天带大家一起安装了Ubuntu14.04系统,没来得及上车的伙伴可以戳这篇文章:手把手教你在VMware虚拟机中安装Ubuntu14.04系统。今天小编带大家一起在Ubuntu14.04中安装Pycharm,具体的教程如下。
全栈程序员站长
2022/09/25
4420
ubuntu安装超详细教程_执手锁怎么安装
在 vmware 上的 Ubuntu 虚拟机上安装 Tomcat、ssh、ftp服务
1、在vmware上的虚拟机和宿主机网络互通联调     选择了 NAT 模式,发现宿主机 ping 不通虚拟机,但是虚拟机可以 ping 通宿主机。     上网搜索了一下,发现问题原因是宿主机这边的网络配置有问题,使用vmware自带“虚拟网络编辑器”对NAT模式的配置型进行一下配置,让主机连接状态变为“已连接”即可。此步骤想要生效,貌似必须重启一下虚拟机才行。 2、在 Ubuntu 上安装 Tomcat     到Tomcat官网下载一个压缩包解压到虚拟机的某个目录下即可。     安装以后终端程序进入bin目录下执行如下命令,让这个目录下的sh命令行脚本可以执行:         chmod u+x *.sh 3、在 Ubuntu 上安装 ssh 服务     终端程序中执行如下命令,可安装 ssh 服务:         sudo apt-get install openssh-server     安装完成以后,可以执行如下命令,看看服务是否已经启动:         ps -e|grep ssh     启动服务的命令如下:         sudo gedit /etc/ssh/sshd_config     (sudo 的意思是以管理员的身份运行,这样可以避免掉运行因为权限问题而终止。) 4、在 Ubuntu 上安装 ftp 服务     终端程序中执行如下命令,可安装 ftp 服务:         sudo apt-get install vsftpd     (在执行此命令之前,还可以执行以下 sudo apt-get update 这个命令,更新一下库。)     更多内容,可参考:http://www.linuxidc.com/Linux/2016-03/129057.htm
LeoXu
2018/08/15
1.1K0
Super快报第24期:三星要摆脱Google单干?
巴塞罗那世界移动通信大会(Mobile World Congress)上,由于Google的缺席,Android阵营的领头羊——三星成为本届大会的主角。大会主办方评选出的2012年年度最佳手机是三星的Galaxy SIII,而三星也当选为年度最佳移动厂商。值得注意的是,三星还联手英特尔展出了一款运行Tizen2.0版本系统的开发者手机。 三星去Google化,想要单干了?援引笔者之前对三星单干是否可行的分析吧。详见《手机操作系统玩家分析:最大变数是三星》: 三星要想玩转自有操作系统 :除非放弃安卓
罗超频道
2018/04/25
7380
Linux安装Docker并运行Ubuntu系统
Docker是一种容器,什么叫容器?在软件开发中,我们经常碰到“这程序在我的电脑上明明没问题啊,怎么在客户的电脑上就有问题?”这是因为各个电脑的软件、硬件不一致。
韦东山
2020/09/30
1.7K0

相似问题

我能在我的Ubuntu手机上安装Chrome吗

10

如何在N900手机上安装Ubuntu操作系统?

10

不能在我的手机上安装ubuntu

10

我能在我的Android手机上安装Ubuntu14.04Server吗?

10

我能在我的手机上安装Ubuntu (索尼爱立信w8)吗?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档