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. C#爬虫之Senlium

    在爬虫过程中,有的网页是动态更新的,有的数据会在页面加载时通过js加载或者用ajax加载,这时候如果只用普通的Request和Response获取的HTML页面将会不完整.所以这时候可以采用Senli ...

  2. Delphi回车键切换焦点

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  3. C# sqlite 无法识别的datetime格式 FromOADate

    再读取不可控数据库datetime字段时,遇到了一个奇葩问题——“无法识别的datetime格式” 搞了半天…… 数据库里看:2017-06-06 10:28:30.000 不做处理查询报错:“无法识 ...

  4. IIS安全狗问题

    1.没有安装以前网站运行正常,安装IIS全狗以后,ajaxpro2出现,找不到任何问题,卸载安全狗以后正常. 2.很久以前遇到的一个问题,有一款NET的cms系统,也是安装了安全狗以后不正常,忘记了c ...

  5. HTML5——拖放 地理定位 视频 音频 新的input类型

    拖放 ————>   设置元素为可拖放 拖动什么 放到何处 进行放置 实例[来回拖放] 地理定位 使用地理定位 处理错误和拒绝 在地图中显示结果 基于脚本的交互式地图 给定位置的信息 用户移动时 ...

  6. 【MM系列】SAP 根据采购订单创建外向交货单的BAPI

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 根据采购订单创建外向交货单的 ...

  7. 基于 Timer是一种定时器工具

    没有依赖 通过Timer中的schedule方法启动定时任务 一般不采用此方法 /** * ------------------------------------------------------ ...

  8. Android的Monkey和MonkeyRunner

    本文部分解释性语段摘自网络百科或其它BLOG,语句内容网络随处可见,也不知道谁是初始原创,便不再署名出处,如有雷同,还请见谅. Monkey 什么是Monkey Monkey是Android中的一个命 ...

  9. vue vuex应用

    vue结构图: vuex为vue的一个插件,用来管理共享数据的,局部数据声明在自己组件内部. 没有使用vuex时,所有共享数据和操作数据的方法都声明在父组件内,数据的通信用props及pubsub等. ...

  10. Strust2+POI导出exel表格且解决文件名中文乱码/不显示

    下载并导入项目[poi.3.17.jar] strust.xml <action name="returnLate_*" class="com.stureturnl ...