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. Tomcat使用介绍

    一.tomcat介绍 Tomcat服务器是一个免费的开放源代码的轻量级Web 应用服务器,如apache处理静态HTML能力突出不同,tomcat处理动态HTML能力相当强大,因此一般项目都是部署ap ...

  2. Jackson常用注解及用法

    最近写项目,用到Jackson的一些注解,总结一下,帮助自己记忆. 1.@JsonIgnore 和 @JsonIgnoreProperties 两个注解可以对照比较后选择使用: @JsonIgnore ...

  3. PHP 对Memcache的使用实例

    <?php //连接Memcache$mem = new Memcache;$mem->connect("localhost", 11211) or die (&quo ...

  4. .net core 学习小结之 配置介绍(config)以及热更新

    命令行的配置 var settings = new Dictionary<string, string>{ { "name","cyao"}, {& ...

  5. ---Mock---基本使用

    一.mock解决的问题 开发时,后端还没完成数据输出,前端只好写静态模拟数据.数据太长了,将数据写在js文件里,完成后挨个改url.某些逻辑复杂的代码,加入或去除模拟数据时得小心翼翼.想要尽可能还原真 ...

  6. react-native的技巧

    按钮定制 給图片添加点击事件 <TouchableOpacity onPress={this.lookAlbum} style={{flex: 0, height: 40, width: 40, ...

  7. django中使用原生的orm

    只有用的时候才能执行

  8. 配置DHCP中继

    本实验模拟企业网络场景.某公司分部的网络由交换机S1和网关路由器R1组成,员工终端PC-1和PC-2都连接在S1上.公司要求分部内所有员工主机的IP地址都通过总部的DHCP服务器自动获取.分部网关路由 ...

  9. Tomcat原理剖析

    Tomcat原理学习 理解Tomcat工作原理 Tomcat的概念及启动原理浅析 Tomcat系统架构与设计模式

  10. JSP页面读取数据中的数据内容,出现乱码现象的解决方法

    1.首先要确保JSP页面的编码已修改为“utf-8”的字符编码: 2.然后再在jsp页面上添加代码进行设置: 先用getBytes()方法读出数据,然后再new String()方法设置格式为“utf ...