有個排序後的字符串數組,其中散佈着一些空字符串,找出給定字符串的位置

版權聲明:本文爲博主原創文章,未經博主容許不得轉載。java

/**數組

 * 功能:有個排序後的字符串數組,其中散佈着一些空字符串,找出給定字符串的位置。app

 */
[java] view plain copyspa

 

  1. /** 
  2.  * 思路:對二分查找法作修改,與mid比較的地方,若是mid爲空字符串,則將mid換到離它最近的非空字符串的位置。 
  3.  * @param strings 
  4.  * @param str 
  5.  * @return 
  6.  */  
  7. public static int search(String[] strings,String str){  
  8.     if(strings==null||str==null||str=="")  
  9.         return -1;  
  10.     return searchStr(strings,str,0,strings.length);  
  11. }  
  12.   
  13. public static int searchStr(String[] strings,String str,int first,int last){  
  14.     if(first>last)  
  15.         return -1;  
  16.       
  17.     int mid=(first+last)/2;  
  18.     //若mid爲空字符串,找出離它最近的非空字符串  
  19.     if(strings[mid].isEmpty()){  
  20.         int left=mid-1;  
  21.         int right=mid+1;  
  22.         while(true){  
  23.             if(left<first&&right>last)  
  24.                 return -1;  
  25.             else if(right<last&&!strings[right].isEmpty()){  
  26.                 mid=right;  
  27.                 break;  
  28.             }else if(left>first&&!strings[left].isEmpty()){  
  29.                 mid=left;  
  30.                 break;  
  31.             }  
  32.             left--;  
  33.             right++;  
  34.         }  
  35.     }  
  36.       
  37.     if(str.equals(strings[mid]))  
  38.         return mid;  
  39.     else if(strings[mid].compareTo(str)<0)  
  40.         return searchStr(strings, str, mid+1, last);//搜索右半邊  
  41.     else  
  42.         return searchStr(strings, str, first, mid-1);//搜索左半邊          
  43. }
相關文章
相關標籤/搜索