2015-04-21 24 views
1

如果任何人都可以在那裏幫忙,我會非常感激。搜索沒有內置方法的字符串數組

本質上,我正在做一個家庭作業項目,其中,部分,我需要搜索一個數組。數組,我目前有一個字符串類型,但本質上是一個日期的集合。 (在格式05/06/2014)

我只是在我的智慧結束嘗試找到一種方法來允許用戶搜索此數組,特別是不使用內置方法,如array.binarysearch等

我試圖執行二進制搜索,但似乎沒有工作,我可以提供代碼,如果你想看看我可能會出錯的地方。但是,有沒有更好的搜索,我應該使用這種字符串類型,或者我應該將字符串數組轉換爲不同的類型?

如果任何人都可以幫助,我將不勝感激,我不一定要求任何人爲我做我的工作我只是很高興,如果有人可以讓我朝着正確的方向碰撞,因爲這個問題一直在做我的堅果in。謝謝!

當前的二進制搜索代碼:

public static void BinarySearch(string[] dateArray, string searchTerm) 
{ 
    int first = 0; 
    int last = dateArray.Length - 1; 
    int position = -1; 
    bool found = false; 
    int compCount = 0; 


    while (found != true && first <= last) 
    { 
     int middle = (first + last)/2; 

     int comparisonSTR = string.Compare(dateArray[middle], searchTerm); 

     if (dateArray[middle] == searchTerm) 
     { 
      found = true; 
      position = middle; 
      compCount++; 

      Console.WriteLine("Your search has been found after " + compCount + "comparisons."); 
     } 

     else if (comparisonSTR > 0) 
     { 
      last = middle; 
      compCount++; 
     } 

     else 
     { 
      first = middle; 
      compCount++; 
     } 
    } 
} 
+2

這絕對是一個好主意,發佈你的代碼,特別是你認爲不正確的代碼。如果我們不知道自己在做什麼/試圖做什麼,那麼很難提供指導。 –

+2

該代碼將有助於告訴您二分搜索出了什麼問題。對這種數據使用DateTime也可能更好。這是一個更容易比較。 – druidicwyrm

+2

如果您比較日期,請不要將它們作爲字符串進行比較,而應將其作爲「DateTime」實例進行比較。 「不能使用內置的方法」評論家庭作業。這很好,但要事先做好。 – Alex

回答

0

對於教育措施,您的二進制搜索是正確的*,如果不是很乾淨 - 就像@Alex說,你只需要確保你比較它們的DateTime是否。問題是與線

int comparisonSTR = string.Compare(dateArray[middle], searchTerm); 

因爲「串類」不知道日期,因此不能真正給你當你試圖尋找日期的日期時間比較什麼。它只能給你一個比較,如果一個術語按字母順序排在前面,等於或在另一個術語之後。

相反,如果您將它們轉換爲DateTimes並使用DateTimes特定的比較器,那麼您應該找回可用於二分搜索的比較。您可以將它們轉換爲DateTime在線

int comparisonSTR = DateTime.Compare(Convert.ToDateTime(searchTerm), Convert.ToDateTime(dateArray[middle])); 

或將其轉換的循環,你在你的方法做的第一件事情,使外面更容易一點閱讀

DateTime[] dates = Array.ConvertAll(dateArray, Convert.ToDateTime); 
DateTime searchDate = Convert.ToDateTime(searchTerm); 

while (found != true && first <= last) 
{ 
    int middle = (first + last)/2; 
    int comparison = DateTime.Compare(searchDate, dates[middle]); 

比其他那個,你幾乎定下了。您現在可能已經解決了這個問題,所以在這種情況下,我只是將其發佈一部分來解釋爲什麼string.Compare在這種情況下無法爲您轉換日期。

編輯:確保測試你的邊緣情況(例如,不僅搜索中間,也搜索不同數組大小的第一個和最後一個元素),因爲我懷疑你的二分查找可能不完全正確, 。

+0

,那麼這個日期會很有幫助。你必須喜歡無限循環。 – Alex

+0

好的,我看到你可能發現了問題 – Alex

+0

是的,我沒有仔細檢查。我的錯。 –