关于Array.BinarySearch和Array.Sort

类别:.NET开发 点击:0 评论:0 推荐:

(1)Array.BinarySearch(...)是否先对数组排序再搜索?
答案:否
代码:
using System;

namespace arraysort
{
        class Item : IComparable
        {
                public int x;
                public int y;
                #region IComparable 成员

                public Item(int x, int y)
                {
                        this.x = x;
                        this.y = y;
                }
                public int CompareTo(object obj)
                {
                        if ( obj is int )
                                return x.CompareTo( (int)obj);
                        throw new ArgumentException(" object is not a int!") ;
                }

                #endregion
        }
        class Class1
        {
                [STAThread]
                static void Main(string[] args)
                {
                        Item []myArray = new Item[5];
                        myArray[0] = new Item( 5, 20);
                        myArray[1] = new Item( 9, 6 );
                        myArray[2] = new Item(3, 6);
                        myArray[3] = new Item( 28, 2);
                        myArray[4] = new Item(4, 12);
                        int find = Array.BinarySearch( myArray, 3);
                        for (int i = 0; i< 5; i++)
                        {
                                System.Console.WriteLine("[ {0},{1} ]",((Item)myArray[i]).x ,((Item)myArray[i]).y );
                        }
                        if (i>=0)
                                System.Console.WriteLine("[ {0},{1} ]",((Item)myArray[find]).x ,((Item)myArray[find]).y );
                }
        }
}
output:
[ 5,20 ]
[ 9,6 ]
[ 3,6 ]
[ 28,2 ]
[ 4,12 ]
[ 3,6 ]

(2):实现Array.Sort, CompareTo()的实现和上面不同:
using System;

namespace arraysort
{
        class Item : IComparable
        {
                public int x;
                public int y;
                #region IComparable 成员
                public Item(int x, int y)
                {
                        this.x = x;
                        this.y = y;
                }
                public int CompareTo(object obj)//参数是数组里面的元素
                {
                        if ( obj is Item )
                                return x.CompareTo( ((Item)obj).x);
                        throw new ArgumentException(" object is not a int!") ;
                }

                #endregion
        }
        class Class1
        {
                [STAThread]
                static void Main(string[] args)
                {
                        Item []myArray = new Item[5];
                        myArray[0] = new Item( 5, 20);
                        myArray[1] = new Item( 9, 6 );
                        myArray[2] = new Item(3, 6);
                        myArray[3] = new Item( 28, 2);
                        myArray[4] = new Item(4, 12);
                        Array.Sort(myArray);
                        for (int i = 0; i< 5; i++)
                        {
                                System.Console.WriteLine("[ {0},{1} ]",((Item)myArray[i]).x ,((Item)myArray[i]).y );
                        }

                }
        }
}
output:
[ 3,6 ]
[ 4,12 ]
[ 5,20 ]
[ 9,6 ]
[ 28,2 ]

本文地址:http://com.8s8s.com/it/it44623.htm