给二维数组排序  
   下载源代码 
 
〖 作者:bernardvai 〗〖 大小:1k 〗〖 发布日期:2006-12-20 〗〖 浏览:0 〗
 
二维数组排序实例:import java.util.*;
public class TwoDimArrayTest {
    public static void main(String[] args) {
        String[][] arr = {{"B","Z","K"},
                          {"C","X","L"},  
                          {"A","Y","M"}} ;
        
        //缺省(按0列升序)
        Arrays.sort(arr, new TwoDimArrayComparator());
        printArray(arr);
        
        //按0列降序
        Arrays.sort(arr, new TwoDimArrayComparator(0,-1));
        printArray(arr);
        
        //按1列升序
        Arrays.sort(arr, new TwoDimArrayComparator(1));
        printArray(arr);        
        
        //按1列降序       
        Arrays.sort(arr, new TwoDimArrayComparator(1,-1));
        printArray(arr);        
        
        //按2列升序
        Arrays.sort(arr, new TwoDimArrayComparator(2));
        printArray(arr);        
        
        //按2列降序
        Arrays.sort(arr, new TwoDimArrayComparator(2,-1));
        printArray(arr);      
    }
    public static void printArray(String[][] arr) {
        for (int i= 0; i< arr.length ; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] +"\t");
            }
            System.out.println();
        }
        System.out.println("======================");
    }    
}  class TwoDimArrayComparator implements Comparator{
    private int keyColumn = 0;
    private int sortOrder = 1;
    
    public TwoDimArrayComparator () {}
    public TwoDimArrayComparator (int keyColumn) {
        this.keyColumn = keyColumn;    
    }
    public TwoDimArrayComparator (int keyColumn,int sortOrder) {
        this.keyColumn = keyColumn;    
        this.sortOrder = sortOrder;
    }
    
    public int compare(Object a, Object b) {
        if (a instanceof String[]) {
            return sortOrder * ((String[])a)[keyColumn].compareTo(((String[])b)[keyColumn]);
        } else if (a instanceof int[]){
            return sortOrder * (((int[])a)[keyColumn] - ((int[])b)[keyColumn]);        
        } else {        
            return 0;       
        }
    }    
}
运行结果:C:\java>java TwoDimArrayTest
A Y M
B Z K
C X L
======================
C X L
B Z K
A Y M
======================
C X L
A Y M
B Z K
======================
B Z K
A Y M
C X L
======================
B Z K
C X L
A Y M
======================
A Y M
C X L
B Z K
====================== 

解决方案 »

  1.   


    public class TwoDimArrayTest
    {
        public static void Main(string[] args)
        {
            string[][] arr = new string[][] {new string[]{"B","Z","K"}, 
                             new string[]{"C","X","L"}, 
                             new string[]{"A","Y","M"}};        //缺省(按0列升序) 
            Array.Sort(arr, new TwoDimArrayComparator());
            printArray(arr);        //按0列降序 
            Array.Sort(arr, new TwoDimArrayComparator(0, -1));
            printArray(arr);        //按1列升序 
            Array.Sort(arr, new TwoDimArrayComparator(1));
            printArray(arr);        //按1列降序               
            Array.Sort(arr, new TwoDimArrayComparator(1, -1));
            printArray(arr);        //按2列升序 
            Array.Sort(arr, new TwoDimArrayComparator(2));
            printArray(arr);        //按2列降序 
            Array.Sort(arr, new TwoDimArrayComparator(2, -1));
            printArray(arr);
        }
        public static void printArray(String[][] arr)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                for (int j = 0; j < arr[i].Length; j++)
                {
                    Console.Write(arr[i][j] + "\t");
                }
                Console.WriteLine();
            }
            Console.WriteLine("======================");
        }
    }class TwoDimArrayComparator : System.Collections.IComparer
    {
        private int keyColumn = 0;
        private int sortOrder = 1;    public TwoDimArrayComparator() { }
        public TwoDimArrayComparator(int keyColumn)
        {
            this.keyColumn = keyColumn;
        }
        public TwoDimArrayComparator(int keyColumn, int sortOrder)
        {
            this.keyColumn = keyColumn;
            this.sortOrder = sortOrder;
        }    public int Compare(Object a, Object b)
        {
            if (a is String[])
            {
                return sortOrder * ((String[])a)[keyColumn].CompareTo(((String[])b)[keyColumn]);
            }
            else if (a is int[])
            {
                return sortOrder * (((int[])a)[keyColumn] - ((int[])b)[keyColumn]);
            }
            else
            {
                return 0;
            }
        }
    }
      

  2.   

    using System;
    public class TwoDimArrayTest
    {
    [STAThread]
    public static void  Main(System.String[] args)
    {
    System.String[][] arr = {new System.String[]{"B", "Z", "K"}, new System.String[]{"C", "X", "L"}, new System.String[]{"A", "Y", "M"}};

    //缺省(按0列升序) 
    System.Array.Sort(arr, new TwoDimArrayComparator());
    printArray(arr);

    //按0列降序 
    System.Array.Sort(arr, new TwoDimArrayComparator(0, - 1));
    printArray(arr);

    //按1列升序 
    System.Array.Sort(arr, new TwoDimArrayComparator(1));
    printArray(arr);

    //按1列降序               
    System.Array.Sort(arr, new TwoDimArrayComparator(1, - 1));
    printArray(arr);

    //按2列升序 
    System.Array.Sort(arr, new TwoDimArrayComparator(2));
    printArray(arr);

    //按2列降序 
    System.Array.Sort(arr, new TwoDimArrayComparator(2, - 1));
    printArray(arr);
    }
    public static void  printArray(System.String[][] arr)
    {
    for (int i = 0; i < arr.Length; i++)
    {
    for (int j = 0; j < arr[i].Length; j++)
    {
    System.Console.Out.Write(arr[i][j] + "\t");
    }
    System.Console.Out.WriteLine();
    }
    System.Console.Out.WriteLine("======================");
    }
    }class TwoDimArrayComparator : System.Collections.IComparer
    {
    private int keyColumn = 0;
    private int sortOrder = 1;

    public TwoDimArrayComparator()
    {
    }
    public TwoDimArrayComparator(int keyColumn)
    {
    this.keyColumn = keyColumn;
    }
    public TwoDimArrayComparator(int keyColumn, int sortOrder)
    {
    this.keyColumn = keyColumn;
    this.sortOrder = sortOrder;
    }

    public virtual int Compare(System.Object a, System.Object b)
    {
    if (a is System.String[])
    {
    return sortOrder * ((System.String[]) a)[keyColumn].CompareTo(((System.String[]) b)[keyColumn]);
    }
    else if (a is int[])
    {
    return sortOrder * (((int[]) a)[keyColumn] - ((int[]) b)[keyColumn]);
    }
    else
    {
    return 0;
    }
    }
    }
      

  3.   

    /* 娘娘的自己搞定了,代码如下:总结一下:
    1\误区:起初想通过两个二维数组通过交换x与y的坐标完成排序,但发现如果有重复的元素时就会出问题
    2\转折:突然想到将所有元素插入到一个二维数组中就不会出现对重复元素的问题
    */public class Class1
     static void Main(string[] args)
            {
                int[] ints = new int[] { 1,2,3,4,5,6,7,8,9};//数组            int[,] iii = Sort(ints);            Print(iii);            Console.Read();        }        static int[,] Sort(int[] ints)
            {            int y = ints.Length / 4 + (ints.Length % 4 == 0 ? 0 : 1);//多维数组的行数            int x = 4;//多维数组的行数            int[,] iii = new int[y, x];//多维数组            int ix = 0;//多维数组的x下标            int iy = 0;//多维数组的y下标            for (int i = 0; i < ints.Length; i++)
                {                iii[ix, iy] = ints[i];                if (ix + 1 >= y)
                    {                    // 超过多维数组的最大行数                    ix = 0;                    iy += 1;
                    }
                    else
                    {                    ix += 1;                    if ((ix * x + iy + 1 > ints.Length))
                        {                        // 元素数量超过规定数量                        ix = 0;                        iy += 1;                    }
                    }            }            return iii;
                
            }        static void Print(int[,] iii)
            {            for (int i = 0; i < iii.GetLength(0); i++)
                {                for (int j = 0; j < iii.GetLength(1); j++)
                    {                    Console.Write(iii[i,j].ToString()+"\t");
                        
                    }
                    Console.WriteLine();
                }
            }
    }