2013-03-02 95 views
0

我一直在嘗試在C#中編寫自己的quicksort。但是,當我連接較低的,較大的分區和較大的分區時,Visual Studio告訴我它不能將void轉換爲字符串列表,儘管我不確定連接的lessList和moreList如何變爲無效。QuickSort無效問題

代碼片段:

public List<string> SortFiles(List<string> fileList) 
    { 
     int listSize = fileList.Count; 

     if (listSize <= 1) 
     { 
      return fileList; //because it is already sorted 
     } 

     string pivotString = fileList[listSize/2]; 

     //partition list 
     List<string> lessList = new List<string>(); 
     List<string> moreList = new List<string>(); 

     foreach (string g in fileList) 
     { 
      if (String.Compare(g, pivotString) <= 0) 
      { 
       lessList.Add(g); 
      } 
      else 
      { 
       moreList.Add(g); 
      } 
     } 

     lessList = SortFiles(lessList); 
     moreList = SortFiles(moreList); 

     //concatenate lessList + pivot + moreList 
     List<string> sortedFiles = lessList.Add(pivotString); //thinks is void 
     sortedFiles = sortedFiles.AddRange(moreList);   //thinks is void 

     return sortedFiles; 
+1

'Add'和'AddRange'返回'void'。編譯器應該做什麼? – 2013-03-02 10:57:55

+0

您的意思是: lessList.Add(pivotString); sortedFiles = lessList; sortedFiles.AddRange(moreList); – 2013-03-02 11:03:56

+0

謝謝!那就是訣竅。 – 2013-03-02 11:17:41

回答

2

事實是,AddAddRange不添加的元素(或範圍)返回一個新的列表。 相反,他們將元素添加到列表中,並在原地進行修改。

事實上,你可以簡單地修改代碼,只是做AddAddRange,它會工作。

請注意,它會效率相當低,因爲您正在創建列表和複製周圍的東西很多。