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#程序设计有所帮助。