现在有一个excel工作表  有5行5列的内容  然后对某一列进行排序  我在程序里如何才能知道他已经排列了,派的是降序还是升序

解决方案 »

  1.   

    ……确实冷门。思路:
    准备一个枚举:enum Directions{UnKnown, Asc, Desc};
    设置一个方向变量 Direction direction = Direction.Unknown;
    对该列的值进行遍历和比较。
    对前2个Cell的值,如果Cell[1]>Cell[0],则direction=Direction.Asc,如果后一个Cell值均一直大于前一个Cell值,则direction不会变,最后可确定是升序。
    如果Cell[1]<Cell[0],则为direction=Direction.Desc,如果后一个Cell值均一直小于前一个Cell值,则direction不会变,最后可确定是降序。
    期间,如果出现相反的比较结果。则说明未排过序整个方法类似 电梯的一种调度算法。
      

  2.   

    模拟代码如下,应该还能再优化。
    public static void Main(string[] args)
    {
        //testdouble();
        int[] source1 = new int[] { 1, 3, 5, 6, 8 };
        int[] source2 = new int[] { 8, 6, 5, 2, 0 };
        int[] source3 = new int[] { 1, 3, 5, 6, 4 };    Console.WriteLine("Array 1 sorted by: {0}", evelator(source1));
        Console.WriteLine("Array 2 sorted by: {0}", evelator(source2));
        Console.WriteLine("Array 3 sorted by: {0}", evelator(source3));
    }public enum Directions { Unknown, Asc, Desc };
    public static Directions evelator(int[] source)
    {
        Directions dir = (source[1] >= source[0]) ? Directions.Asc : Directions.Desc;    for (int i = 2, prev = source[1]; i < source.Length; i++)
        {
            Directions tempdir = Directions.Unknown;        if (source[i] >= prev)
                tempdir = Directions.Asc;
            else
                tempdir = Directions.Desc;        if (tempdir != dir)
            {
                dir = Directions.Unknown;
                break;
            }        prev = source[i];
        }    return dir;
    }
    结果:
    Array 1 sorted by: Asc
    Array 2 sorted by: Desc
    Array 3 sorted by: Unknown