欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现的二维数组排序算法示例

程序员文章站 2023-12-17 11:52:46
本文实例讲述了c#实现的二维数组排序算法。分享给大家供大家参考,具体如下: class order { /// //...

本文实例讲述了c#实现的二维数组排序算法。分享给大家供大家参考,具体如下:

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(1)];
   int k;
   int compareresult;
   for (int i = 0; i < values.getlength(0); i++)
   {
    for (k = i + 1; k < values.getlength(0); k++)
    {
     if (type.equals(1))
     {
      for (int h = 0; h < ordercolumnsindexs.length; h++)
      {
       compareresult = comparer.default.compare(getrowbyid(values, k).getvalue(ordercolumnsindexs[h]), getrowbyid(values, i).getvalue(ordercolumnsindexs[h]));
       if (compareresult.equals(1))
       {
        temp = getrowbyid(values, i);
        array.copy(values, k * values.getlength(1), values, i * values.getlength(1), values.getlength(1));
        copytorow(values, k, temp);
       }
       if (compareresult != 0)
        break;
      }
     }
     else
     {
      for (int h = 0; h < ordercolumnsindexs.length; h++)
      {
       compareresult = comparer.default.compare(getrowbyid(values, k).getvalue(ordercolumnsindexs[h]), getrowbyid(values, i).getvalue(ordercolumnsindexs[h]));
       if (compareresult.equals(-1))
       {
        temp = getrowbyid(values, i);
        array.copy(values, k * values.getlength(1), values, i * values.getlength(1), values.getlength(1));
        copytorow(values, k, temp);
       }
       if (compareresult != 0)
        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(0) - 1))
    throw new exception("rowid超出最大的行索引号!");
   object[] row = new object[values.getlength(1)];
   for (int i = 0; i < values.getlength(1); 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(0) - 1))
    throw new exception("rowid超出最大的行索引号!");
   if (row.length > (values.getlength(1)))
    throw new exception("row行数据列数超过二维数组的列数!");
   for (int i = 0; i < row.length; i++)
   {
    values[rowid, i] = row[i];
   }
  }
}
static void main(string[] args)
{
   object[,] o = new object[6, 4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 11, 12 }, { 15, 16, 11, 17, }, { 5, 6, 7,9 } };
   console.writeline("没排序前的二维数组:");
   print(o);
   console.writeline("根据第3,4列升序排序后的数组:");
   order.orderby(o, new int[] { 2,3 },0);
   print(o);
   console.writeline("根据第3,4列降序序排序后的数组:");
   order.orderby(o, new int[] { 2, 3 }, 1);
   print(o);
   console.read();
}
static void print(object[,] values)
{
   int k;
   for (int i = 0; i < values.getlength(0);i++ )
   {
    for (k = 0; k < values.getlength(1);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#相关内容感兴趣的读者可查看本站专题:《c#数组操作技巧总结》、《c#遍历算法与技巧总结》、《c#程序设计之线程使用技巧总结》、《c#中xml文件操作技巧汇总》、《c#常见控件用法教程》、《winform控件用法总结》、《c#数据结构与算法教程》及《c#面向对象程序设计入门教程

希望本文所述对大家c#程序设计有所帮助。

上一篇:

下一篇: