写一个Sort方法,二维数组(整数型),第一维按降序排列,第二维相等的,按升序排列。

解决方案 »

  1.   

    首先按照第二列排序,然后使用一种稳定排序算法(比如冒泡)再按照第一列排序,这是理论。
    不过用LINQ的话,不需要,只要data.OrderBy(...).ThenBy(...)就可以了。
      

  2.   

    本帖最后由 caozhy 于 2012-11-06 19:29:24 编辑
      

  3.   

    菜鸟表示没看懂大神们说的啥。怎么个情况?第一维排序是指的int[i][0]的排序么?
      

  4.   

    if x.第一列>y.第一列
    return 1
    else if x.第一列<y.第一列
    return -1
    else
     判断第二列
      

  5.   

    可以说,你要 一个二维数组的 2个元素 作为一个整体,来进行 类似 ASCII 码那种比较, 如果 你吧 2个元素分开比较大小一个降序一个升序,那数据的准确性保证不了,如果得到你要的结果,数据的下标和元素的对应关系就乱了。
      

  6.   

    如果你按 第一数据 为 基准,那下标2就没有办法排序了, 一个二维数组里面存储的 X,Y 型数据。你要不就按照 X进行 排序 Y进行 辅助 排序,一个X技术,Y从新出一组数据,
    所以我觉得你这个题有问题也,因为2维数组存储的是 (X,Y)2个数,2个数的排序方式不一样,那你没有办法保证 第2个排序是你想要的结果,除非你把他的 X,Y 作为一个 整体 进行处理。
      

  7.   

    你自己写个CompareTo好了。这个喜欢直接用SQL.方便.
      

  8.   


    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/>");
                }
            }刚写的