本文实例讲述了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#程序设计有所帮助。
本文向大家介绍php 二维数组快速排序算法的实现代码,包括了php 二维数组快速排序算法的实现代码的使用技巧和注意事项,需要的朋友参考一下 php 二维数组快速排序算法的实现代码 二维数组排序算法与一维数组排序算法基本理论都是一样,都是通过比较把小的值放在左变的数组里,大的值放在右边的数组里在分别递归。 实例代码: 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的
本文向大家介绍C++二维数组中的查找算法示例,包括了C++二维数组中的查找算法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++二维数组中的查找算法。分享给大家供大家参考,具体如下: 一、问题: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 二、实现代码: 希望
本文向大家介绍PHP二维数组排序简单实现方法,包括了PHP二维数组排序简单实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP二维数组排序简单实现方法。分享给大家供大家参考,具体如下: 运行结果如下: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php排序算法总结》、《PHP基本语法入门教程》、《PHP错误与异常处理方法总结》及《php常用函数与技巧总结》 希望本文所述对
我的任务是用C#为二维数组创建合并排序算法。数组看起来像这样 我需要从文件中取数组并按x的升序对行进行排序,同时程序要检查是否有相同x值同时不同Y值的坐标对,当数组排序后,程序要将其写入文件中。我已经为一维数组创建了算法,但是不懂如何为二维数组重写算法,这是我的代码,请帮助我
问题内容: 我已经实现了冒泡排序来对二维java long [] []进行排序,但是我的天哪太慢了,我将需要禁食算法,因为我将生成最大堆大小的数组,jvm将允许我, 所以我认为最好和最快的方法是使用内置的java Arrays.sort 我不介意它是否只能在第一列上排序,因为我可以更改程序以适合它,但我碰到了这一点,但对陌生人并不熟悉, 这将使我能够对整数的维数组进行排序,有人知道如何将其更改为允
编写一个程序,提示用户输入一个双值nxn矩阵,并显示一个新的矩阵,其中对初始矩阵的列进行了排序。您可以使用任何排序算法来解决问题;请在代码头中指定所用排序算法的名称。您的程序必须实现排序算法;不能使用Array类中提供的排序方法。排序应该实现到一个方法中,其中返回一个新数组,而原始数组保持不变: 该程序还应该实现一个方法,打印初始和结果矩阵给用户。打印出来的应该是很好的格式。下面是一个运行示例: