(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 ] 
|