氟塑料离心泵www.buybeng.com

jquery教程http://www.software8.co/wzjs/jquery/

用二分法对引用类型进行查找

首先,我们都清楚,如果想在一堆数据中进行查找的话,这些数据最好都是排好序的,这样才方便查找。

           也就是说查找,一般是建立在排序的基础上,下面我们就拿上篇博文中的例子:

       http://www.blogjava.net/jialisoft/archive/2012/10/05/389054.html

          对Date这个引用类型进行查找

  1. public class TestSearchDate  
  2. {  
  3.     public static void main(String args[])  
  4.     {  
  5.         Date[] d=new Date[5];  
  6.         d[0]=new Date(2006,5,4);  
  7.         d[1]=new Date(2006,7,4);  
  8.         d[2]=new Date(2008,5,4);  
  9.         d[3]=new Date(2004,5,9);  
  10.         d[4]=new Date(2004,5,4);  
  11.           
  12.         bubbleSort(d);  
  13.           
  14.         for(int i=0;i<=d.length-1;i++)  
  15.         {  
  16.             System.out.println(d[i]);  
  17.         }  
  18.           
  19.         Date oneDate=new Date(2008,5,4);    //查找这个日期中排序序列的什么位置  
  20.         System.out.println(Search(oneDate,d));  
  21.     }  
  22.       
  23.     //用冒泡排序法,进行排序  
  24.     public static void bubbleSort(Date[] d)  
  25.     {  
  26.         for(int i=d.length-1;i>=1;i--)  
  27.         {  
  28.             for(int j=0;j<i;j++)  
  29.             {  
  30.                 if(d[j].Compare(d[j+1])>0)  
  31.                 {  
  32.                     Date temp;  
  33.                     temp=d[j];d[j]=d[j+1];d[j+1]=temp;  
  34.                 }  
  35.             }  
  36.         }  
  37.     }  
  38.       
  39.     //用二分法查找oneDate在d这个Date数组的什么位置  
  40.     public static int Search(Date oneDate,Date[] d)  
  41.     {  
  42.         Date temp;  
  43.         int current;  
  44.         int startPos=0;  
  45.         int endPos=d.length-1;  
  46.           
  47.         current=d.length/2;  
  48.           
  49.         while(startPos<=endPos)  
  50.         {  
  51.             if(oneDate.Compare(d[current])==0)  
  52.             {  
  53.                 return current; //找到了,返回当前的索引  
  54.             }  
  55.             else if(oneDate.Compare(d[current])>0)  
  56.             {  
  57.                 startPos=current+1;  
  58.             }  
  59.             else  
  60.             {  
  61.                 endPos=current-1;  
  62.             }  
  63.             current=(startPos+endPos)/2;  
  64.         }  
  65.         return -1;  //表示没有找到  
  66.     }  
  67. }  
  68.   
  69. class Date  
  70. {  
  71.     int year,month,day;  
  72.     Date(int y,int m,int d)  
  73.     {  
  74.         year=y;month=m;day=d;  
  75.     }  
  76.       
  77.     //定义一个比较的方法  
  78.     public int Compare(Date date)  
  79.     {  
  80.         return year>date.year?1  
  81.                 :year<date.year?-1  
  82.                 :month>date.month?1  
  83.                 :month<date.month?-1  
  84.                 :day>date.day?1  
  85.                 :day<date.day?-1:0;  
  86.     }  
  87.     //重写toString方法  
  88.     public String toString()  
  89.     {  
  90.         return "year-month-day:"+year+"-"+month+"-"+day;  
  91.     }  
  92. }  


             主要看就是其中的二分法查找,我想大家一看就明白。

        运行结果如下:

posted on 2012-10-05 10:16 你爸是李刚 阅读(875) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2012年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿

随笔档案

文章档案

技术网站

行业网站

搜索

最新评论

阅读排行榜

评论排行榜

站长网 氟塑料离心泵 注塑机 液晶广告机