2016-04-21 17 views
5
public void BubbleSortArrayString(string[] letters) //change here 
{ 
    bool swap; 
    string temp; //change this too 

    do 
    { 
     swap = false; 

     for (int index = 0; index < (letters.Length - 1); index++) 
     { 
      if (letters[index] > letters[index + 1]) //if first number is greater then second then swap 
      { 
       //swap 

       temp = letters[index]; 
       letters[index] = letters[index + 1]; 
       letters[index + 1] = temp; 
       swap = true; 
      } 
     } 

    } while (swap == true); 
} 

Tôi đã quản lý để bong bóng sắp xếp một số thập phân nhưng tôi hút với một chuỗi, tôi có một tập tin văn bản với tháng trong nó và tôi cần phải sắp xếp nó theo thứ tự bảng chữ cái. Tôi gặp lỗi:Làm thế nào để bong bóng sắp xếp một mảng chuỗi?

operator > cannot be applied to type string and string

Trợ giúp sẽ được đánh giá cao.

+1

FYI: '== true' là không cần thiết vì nó chỉ được đánh giá xem giá trị boolean của bạn bằng một giá trị boolean để trả về một giá trị boolean, kể từ khi bạn đã có một giá trị boolean để bắt đầu với bạn chỉ có thể sử dụng nó ('while (swap)') – Sayse

Trả lời

5

Bạn có thể sử dụng string.Compare(x,y) thay vì <, mà trả về 0 nếu chuỗi đều bình đẳng, nếu không một số nguyên cho biết vị trí tương đối của họ trong thứ tự sắp xếp

for (int index = 0; index < (letters.Length - 1); index++) 
    { 
     if (string.Compare (letters[index], letters[index + 1]) < 0) //if first number is greater then second then swap 
     { 
      //swap 

      temp = letters[index]; 
      letters[index] = letters[index + 1]; 
      letters[index + 1] = temp; 
      swap = true; 
     } 
    } 

Nếu bạn muốn bỏ qua trường hợp trong việc so sánh, bạn nên sử dụng string.Compare (letters[index], letters[index + 1], true)

+0

Cảm ơn bạn rất nhiều! – georgeThornton96

0

Bạn có thể sử dụng String.CompareOrdinal cho chuỗi. Ngoài ra, sẽ tốt hơn nếu bạn đảo ngược câu lệnh if để giảm lồng nhau. Như thế này:

if (String.CompareOrdinal(letters[index], letters[index + 1]) >= 0) continue;      
temp = letters[index]; 
letters[index] = letters[index + 1]; 
letters[index + 1] = temp; 
swap = true; 

Từ MSDN:

This method performs a case-sensitive comparison using ordinal sort rules. For more information about word, string, and ordinal sorts, see System.Globalization.CompareOptions. To perform a case-insensitive comparison using ordinal sort rules, call the Compare(String, String, StringComparison) method with the comparisonType argument set to StringComparison.OrdinalIgnoreCase.

Các vấn đề liên quan