class Order
{
/// <summary>
/// 对二维数组排序
/// </summary>
/// <param name="values">排序的二维数组</param>
/// <param name="orderColumnsIndexs">排序根据的列的索引号数组</param>
/// <param name="type">排序的类型,1代表降序,0代表升序</param>
/// <returns>返回排序后的二维数组</returns>
public static object[,] Orderby(object[,] values, int[] orderColumnsIndexs, int type)
{
object[] temp = new object[values.GetLength()];
int k;
int compareResult;
for (int i = ; i < values.GetLength(); i++)
{
for (k = i + ; k < values.GetLength(); k++)
{
if (type.Equals())
{
for (int h = ; h < orderColumnsIndexs.Length; h++)
{
compareResult = Comparer.Default.Compare(GetRowByID(values, k).GetValue(orderColumnsIndexs[h]), GetRowByID(values, i).GetValue(orderColumnsIndexs[h]));
if (compareResult.Equals())
{
temp = GetRowByID(values, i);
Array.Copy(values, k * values.GetLength(), values, i * values.GetLength(), values.GetLength());
CopyToRow(values, k, temp);
}
if (compareResult != )
break;
}
}
else
{
for (int h = ; h < orderColumnsIndexs.Length; h++)
{
compareResult = Comparer.Default.Compare(GetRowByID(values, k).GetValue(orderColumnsIndexs[h]), GetRowByID(values, i).GetValue(orderColumnsIndexs[h]));
if (compareResult.Equals(-))
{
temp = GetRowByID(values, i);
Array.Copy(values, k * values.GetLength(), values, i * values.GetLength(), values.GetLength());
CopyToRow(values, k, temp);
}
if (compareResult != )
break;
}
}
}
}
return values; }
/// <summary>
/// 获取二维数组中一行的数据
/// </summary>
/// <param name="values">二维数据</param>
/// <param name="rowID">行ID</param>
/// <returns>返回一行的数据</returns>
static object[] GetRowByID(object[,] values, int rowID)
{
if (rowID > (values.GetLength() - ))
throw new Exception("rowID超出最大的行索引号!"); object[] row = new object[values.GetLength()];
for (int i = ; i < values.GetLength(); i++)
{
row[i] = values[rowID, i]; }
return row; }
/// <summary>
/// 复制一行数据到二维数组指定的行上
/// </summary>
/// <param name="values"></param>
/// <param name="rowID"></param>
/// <param name="row"></param>
static void CopyToRow(object[,] values, int rowID, object[] row)
{
if (rowID > (values.GetLength() - ))
throw new Exception("rowID超出最大的行索引号!");
if (row.Length > (values.GetLength()))
throw new Exception("row行数据列数超过二维数组的列数!");
for (int i = ; i < row.Length; i++)
{
values[rowID, i] = row[i];
}
}
}
static void Main(string[] args)
{
object[,] o = new object[, ] { { , , , }, { , , , }, { , , , }, { , , , }, { , , , , }, { , , , } }; Console.WriteLine("没排序前的二维数组:");
Print(o); Console.WriteLine("根据第3,4列升序排序后的数组:");
Order.Orderby(o, new int[] { , },);
Print(o); Console.WriteLine("根据第3,4列降序序排序后的数组:");
Order.Orderby(o, new int[] { , }, );
Print(o); Console.Read(); }
static void Print(object[,] values)
{
int k;
for (int i = ; i < values.GetLength();i++ )
{
for (k = ; k < values.GetLength();k++ )
{
Console.Write(values[i,k]);
Console.Write(" ");
}
Console.WriteLine(" ");
}
}

没排序前的二维数组:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 11 12
15 16 11 17
5 6 7 9
根据第3,4列升序排序后的数组:
1 2 3 4
5 6 7 8
5 6 7 9
13 14 11 12
9 10 11 12
15 16 11 17
根据第3,4列降序序排序后的数组:
15 16 11 17
9 10 11 12
13 14 11 12
5 6 7 9
5 6 7 8
1 2 3 4

C# 实现二维数组的排序算法(代码)的更多相关文章

  1. 代码分享:php对二维数组进行排序

    发布:net/PHP编程  编辑:thebaby   2013-06-28 13:12:54  [大 中 小] 转自:http://www.jbxue.com/article/9991.html本文介 ...

  2. php 二维数组自定义排序

    eg1:只根据一个规则进行排序,比如我下面的数组是一组满减折扣的信息,我要按照满减的金额从小到大排序 代码: <?php $arr =[ ["amount"=> 60, ...

  3. Java 二维数组,排序、切换顺序,查表法二进制十进制,这班查找、排序(冒泡、选择)、遍历,获取最大小值(4)

    Java 二维数组,排序.切换顺序,查表法二进制十进制,折半查找.排序(冒泡.选择).遍历,获取最大小值(4)

  4. Java数组排序基础算法,二维数组,排序时间计算,随机数产生

    import java.util.Arrays; //包含Arrays import java.util.Random; public class HelloWorld { public static ...

  5. php 二维数组的排序

    写这是之前一直二维数组排名困扰.自己写的好复杂. 正题: array_mutisort 官方帮助文档 <?php// 取得列的列表foreach ($data as $key => $ro ...

  6. 如何使用python来对二维数组进行排序

    1.复合排序 直接用numpy的lexsort就可以 import numpy as np data = np.array([[1,2,3,4,5], [1,2,3,6,7], [2,3,4,5,7] ...

  7. 二维数组sort排序

    和副本任务完全无关的奇怪感慨: 完全搞不懂我为什么会在搞图论的时候学这种奇怪东西,需要的时候不会,不需要的时候又莫名增加了奇怪的技能点. 之前的假期规划在十多天的放飞自我中彻底泡汤,简单的图论都一点不 ...

  8. php二维数组自定义排序

    $arr = array( '0' => array('id' =>1,'price'=>200), '1' => array('id' =>2,'price'=> ...

  9. 首先定义一个5X8的二维数组,然后使用随机数填充满。借助Arrays的方法对二维数组进行排序。

    package day02; import java.util.Arrays; import java.util.Random; public class Test01 { public static ...

随机推荐

  1. 阶段3 1.Mybatis_07.Mybatis的连接池及事务_6 mybatis中的事务原理和自动提交设置

    在实际的开发中,建议使用连接池的形式. JNDI的资料 H:\BaiDu\黑马传智JavaEE57期 2019最新基础+就业+在职加薪\讲义+笔记+资料\主流框架\31.会员版(2.0)-就业课(2. ...

  2. Selenium学习之==>18种定位方式的使用

    Selenium的定位方式一共有18种,单数8种,复数8种,最后两种是前面这16种的底层封装 单数形式8种 # 1.id定位 al = driver.find_element_by_id('i1') ...

  3. 四种方法 恢复损坏的Excel文档

    四种方法 恢复损坏的Excel文档 打开一个以前编辑好的Excel工作簿,却发现内容混乱,无法继续进行编辑,而且还不能够进行打印.这是很多朋友在处理Excel文件时都可能会遇到的一个问题,面对这种情况 ...

  4. case when then else end 累加

    表结构 id(pk) satisfy(满意,一般,不满意) 一条语句查询 总数 各satisfy总数 SELECT count(*) AS 总数, count( CASE satisfy WHEN ' ...

  5. 远程桌面 虚拟打印 到本地打印机(虚拟化 终端 远程接入 RemoteApp)

    使用远程桌面或remoteapp进行打印时,若需使用本地的打印机,需要通过重定向方式,但本地打印机如果五花八门比较杂,那给服务器安装打印机驱动很麻烦. 其实可以借助虚拟打印机简化操作,省去给服务器安装 ...

  6. charles抓包教程

    百度搜索下载charles 默认安装即可完成 1.双击charles.exe启动,我的是4.2.7版本.最好下载原版的不要去破解中文,会有不兼容 1.搜索该软件许可证书并输入即可长期使用 2.设置代理 ...

  7. LeetCode.868-二进制距离(Binary Gap)

    这是悦乐书的第333次更新,第357篇原创 01看题和准备 今天介绍的是LeetCode算法题中Easy级别的第203题(顺位题号是868).给定正整数N,找到并返回N的二进制表示中两个连续1之间的最 ...

  8. SecureCRT Linux系统ssh连接终端最常用快捷键

    CecureCRT连接工具常用快捷键总结: 查看 Alt + Enter 全屏 菜单 Alt + f + n 克隆会话窗口 Alt + c 在新窗口中连接,连接窗口中勾选open in a tab可以 ...

  9. tomcat启动失败的三种方法

    Tomcat启动失败的解决办法 1. 重复映射 用eclipse开发时,用Eclipse开发,新建了的servlet会有一个url-pattern声明: 这样就不需要再在web.xml中添加映射,如果 ...

  10. php批量POST修改

    这是一个thinkphp中的批量修改的案例: 如需要删除多项,或者同时修改多项记录 要点: 前端表单中name要加[],如:<input type="hidden" name ...