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