C# double[][] 的排序问题
来源:互联网 发布:java生日祝福程序代码 编辑:程序博客网 时间:2024/06/16 20:33
其实一开始看到double[][]我是很懵圈的,这是个什么玩意儿。不过我试着一步一步用语言去解释它的时候,可以这样理解,用于存放数组的数组。
也就是说,在这个数组中double[0][]的一个元素也是数组。不过闲话不扯了,那么回到问题上来,该怎么排序呢?
假设有如下几个点(1,4), (5,8), (4,2), (7,9), (10,11).我们现在是需要根据Y轴来进行一个排序。
OK,我们先在程序里面,把这个东西抽象出来。如下所示。
var points = new double[][] { new double[]{ 1,4 }, new double[]{ 5,8 }, new double[]{ 4,2 }, new double[]{ 7,9 }, new double[]{ 10,11 } };其实显而易见,在这里我们约定point[0][0]代表点的X坐标,point[0][1]代表点的Y坐标。我们需要看到的结果,是如图所示的。
但是在这个情况中,如果像针对一维数组那样,直接采用各种排序方法不大适用。
OK,那我能不能想到一个办法,没错,就是投票。
首先取出第一个点的Y坐标,然后和其他的几个点分别和第一个点比对,如果小于第一个点的Y坐标则记一分。
那继续取出第二个点的Y坐标,剩余几个又分别和它比对,如果小于第二个点,又分别记一分。
直到最后....分数最多的那个,肯定是最小的.....谈到这里,是不是好像两个for循环就在面前飞了。
下面就是代码....
public static double[][] Sort(double[][] points,int index) { var result = new double[points.Length][];//用来返回排序后结果的 var sort = new List<int>(); //用来负责收集积分的,哈哈,谁分多,谁最小 for (int i = 0; i < points.Length; i++) //初始所有积分为0 { sort.Add(0); } //在这里排序了,算积分 for (int i = 0; i < points.Length ; i++) { for (int j = 0; j < points.Length ; j++) { if (i != j && points[j][index] > points[i][index])//因为和自己比对是没用的,所以i肯定不能等于j { sort[i] += 1; } } } //根据积分然后来重新构造个结果集 for (int i = 0; i < result.Length; i++) { result[result.Length - i -1] = points[sort.FindIndex(m => m == i)]; } return result; }不信邪的可以试试,index是取的1,如上述所说。
但是这里问题来了,坐标点都不一样,那么如果遇到一样的呢?排名会不会出问题。当然,不信的可以自己试试。
在此我就不提会发生什么问题了。那么我们再约定嘛,如果遇到点的Y坐标相同,那么先出来的那个点算是大的,后面那个点是小的。(当然,怎么约定看个人心情和想法)
那么代码如下了。
public static double[][] Sort(double[][] points,int index) { var result = new double[points.Length][]; var sort = new List<int>(); for (int i = 0; i < points.Length; i++) { sort.Add(0); } for (int i = 0; i < points.Length ; i++) { for (int j = 0; j < points.Length ; j++) { if (i != j && points[j][index] >= points[i][index]) { if (points[j][index] != points[i][index]) { sort[i] += 1; } else if (points[j][index] == points[i][index] && i < j) { sort[i] += 1; } } } } for (int i = 0; i < result.Length; i++) { result[result.Length - i -1] = points[sort.FindIndex(m => m == i)]; } return result; }Bingo....运行结果,如上图结果所示.....
这样我们自己想办法实现了排序,不过刚才我的朋友给了我一个方法....
points=points.OrderBy(a => a[1]).ToArray();
好像一句就解决了.....不过自己实现嘛,好歹也是有意义和价值的。综上,提供了两种方法。
未经许可,请勿转载哦。亲。
阅读全文
0 0
- C# double[][] 的排序问题
- C# float double精度损的的问题
- double 的精度问题
- Double的精度问题
- c# ArrayList 的排序问题!
- C# List的排序问题
- C# double小数点位数保留问题
- C# double型运算溢出问题
- zoj 2109 FatMouse' Trade简单的贪心 (注意double数组的排序问题)
- C# 中 Double 和 Java 中 Double 的区别
- double 计算精度的问题
- Java double常见的问题
- double类型引发的问题
- double丢失精度的问题
- C#中,double类型的精度问题(最好都看看)
- c# 科学计数法转换成double时失败的问题
- Double Bubble Sort(双向的冒泡排序)
- int,double,char类型的排序
- Lightoj 1119【状压DP】
- ORACLE中触发器实现删除一张表中数据同时删除另一表中相关数据
- FZU 2270 Two Triangles (计算几何)
- java 标记接口
- 树莓派+motion 实现 监控
- C# double[][] 的排序问题
- gdfzoj #768 百度地图导航(SPFA+建图)
- java异常处理机制深入理解
- 例4.11 访问声明的引例
- Ubuntu安装配置vsftpd
- python核心编程v2.0 第六章习题答案
- ACM_06
- 51nod1046
- 例4.12 访问声明的应用