一道面试题,关于二维数组的排序问题 写一个Sort方法,二维数组(整数型),第一维按降序排列,第二维相等的,按升序排列。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先按照第二列排序,然后使用一种稳定排序算法(比如冒泡)再按照第一列排序,这是理论。不过用LINQ的话,不需要,只要data.OrderBy(...).ThenBy(...)就可以了。 本帖最后由 caozhy 于 2012-11-06 19:29:24 编辑 菜鸟表示没看懂大神们说的啥。怎么个情况?第一维排序是指的int[i][0]的排序么? if x.第一列>y.第一列return 1else if x.第一列<y.第一列return -1else 判断第二列 可以说,你要 一个二维数组的 2个元素 作为一个整体,来进行 类似 ASCII 码那种比较, 如果 你吧 2个元素分开比较大小一个降序一个升序,那数据的准确性保证不了,如果得到你要的结果,数据的下标和元素的对应关系就乱了。 如果你按 第一数据 为 基准,那下标2就没有办法排序了, 一个二维数组里面存储的 X,Y 型数据。你要不就按照 X进行 排序 Y进行 辅助 排序,一个X技术,Y从新出一组数据,所以我觉得你这个题有问题也,因为2维数组存储的是 (X,Y)2个数,2个数的排序方式不一样,那你没有办法保证 第2个排序是你想要的结果,除非你把他的 X,Y 作为一个 整体 进行处理。 你自己写个CompareTo好了。这个喜欢直接用SQL.方便. protected void sort() { int[,] arr = new int[5, 2] { { 1, 1 }, { 2, 2 }, { 2, 3 }, { 4, 4 }, { 5, 5 } }; int len = arr.GetLength(0); int t1 = 0; int t2 = 0; for (int i = 0; i < len; i++) { for (int j = 0; j < len; j++) { if (arr[i, 0] > arr[j, 0]) { t1 = arr[i, 0]; t2 = arr[i, 1]; arr[i, 0] = arr[j, 0]; arr[i, 1] = arr[j, 1]; arr[j, 0] = t1; arr[j, 1] = t2; } else if (arr[i, 0] == arr[j, 0]) { if (arr[i, 1] < arr[j, 1]) { t1 = arr[i, 0]; t2 = arr[i, 1]; arr[i, 0] = arr[j, 0]; arr[i, 1] = arr[j, 1]; arr[j, 0] = t1; arr[j, 1] = t2; } } } } for (int i = 0; i < len; i++) { Response.Write(arr[i, 0] + "-" + arr[i, 1] + "<br/>"); } }刚写的 winform中子窗体在父窗体中全屏怎么后台写代码 加 控件随分辨率自动调整到最佳状态的代码 用WMI在目标机器关机的情况下可以获得Mac地址么 C#中如何关闭正在侦听的异步socket 能帮我看看吗? 想不出了 用C# 但是不要用指针 统计一个字符窜里面的各个字母出现的次数(个数) 如何将oracle中记录同时插入access表中? 问一个关于性能的问题,欢迎进来讨论一下 dataGrid问题求救,请各位高手来相会! 请问一个界面设计的问题???? 又是刷新问题,难搞啊! C# 使用MSXML2求助 求个C#连接vpn源码或模块,需要功能有隐藏vpn连接和连接时候返回连接的结果
不过用LINQ的话,不需要,只要data.OrderBy(...).ThenBy(...)就可以了。
return 1
else if x.第一列<y.第一列
return -1
else
判断第二列
所以我觉得你这个题有问题也,因为2维数组存储的是 (X,Y)2个数,2个数的排序方式不一样,那你没有办法保证 第2个排序是你想要的结果,除非你把他的 X,Y 作为一个 整体 进行处理。
protected void sort()
{
int[,] arr = new int[5, 2] { { 1, 1 }, { 2, 2 }, { 2, 3 }, { 4, 4 }, { 5, 5 } };
int len = arr.GetLength(0);
int t1 = 0;
int t2 = 0;
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len; j++)
{
if (arr[i, 0] > arr[j, 0])
{
t1 = arr[i, 0];
t2 = arr[i, 1];
arr[i, 0] = arr[j, 0];
arr[i, 1] = arr[j, 1];
arr[j, 0] = t1;
arr[j, 1] = t2;
}
else if (arr[i, 0] == arr[j, 0])
{
if (arr[i, 1] < arr[j, 1])
{
t1 = arr[i, 0];
t2 = arr[i, 1];
arr[i, 0] = arr[j, 0];
arr[i, 1] = arr[j, 1];
arr[j, 0] = t1;
arr[j, 1] = t2;
}
} }
}
for (int i = 0; i < len; i++)
{
Response.Write(arr[i, 0] + "-" + arr[i, 1] + "<br/>");
}
}刚写的