如何对字符串数组进行气泡排序


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);
}

我已经设法对小数点进行气泡排序,但我对字符串很糟糕,我有一个包含月份的文本文件,我需要按字母顺序对其进行排序。我收到错误:

运算符>不能应用于字符串和字符串类型

帮助将不胜感激。

您可以使用字符串。Compare(x,y) 而不是 < ,如果字符串相等,则返回 0,否则返回一个整数,指示它们在排序顺序中的相对位置

    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;
        }
    }

如果要在比较过程中忽略大小写,则应使用string.Compare (letters[index], letters[index + 1], true)

你可以使用 String.CompareOrdinal 作为字符串。此外,最好反转if语句以减少嵌套。喜欢这个:

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

从 MSDN:

此方法使用序号排序规则执行区分大小写的比较。有关单词、字符串和序号排序的详细信息,请参阅系统.全球化.比较选项。若要使用序号排序规则执行不区分大小写的比较,请在 comparisonType 参数设置为 StringComparison.OrdinalIgnoreCase 的情况下调用 Compare(String、String、StringComparison) 方法。

最新更新