-1

我想知道是否有人可以告诉我如何使用排序算法按字母顺序对字符串列表进行排序?

我知道我可以简单地使用List<string>.Sort(),但是了解如何将其编写为字符串排序算法会很棒。

目前,我已经了解如何实现带有整数值的排序算法,但是在处理列表中的字符串时我很挣扎。

    // sort a vector of type int using exchange sort
    public void ExchangeSort(int[] array)
    {
        int pass, i, n = array.Length;
        int temp;
        // make n-1 passes through the data 
        for (pass = 0; pass < n - 1; pass++)
        {
            // locate least of array[pass] ... array[n - 1]  
            // at array[pass] 
            for (i = pass + 1; i < n; i++)
            {
                if (array[i] < array[pass])
                {
                    temp = array[pass];
                    array[pass] = array[i];
                    array[i] = temp;
                }
            }
        }
    }
4

2 回答 2

0

您可以像您的 int 分拣机一样执行此操作,但不是

if (array[i] < array[pass])

你会用

var comp = StringComparer.InvariantCultureIgnoreCase;
....
if (comp.Compare(array[i],array[pass]) < 0)

微软提供了几种标准的字符串比较器,例如使用当前文化、不变文化、忽略大小写等。

如果要编写自己的比较函数,最简单的方法是在 for 循环中遍历两个字符串,然后将每个字符相互比较。但是,除非严格用于学习目的,否则我不建议这样做,因为要让您自己的比较在 unicode 和不同语言的所有极端情况下正常工作是非常困难的。

于 2013-04-07T10:14:01.587 回答
0

字符串的比较可以通过 string.Compare 函数来完成。要手动执行此操作,可能会变得相当复杂,因为有许多不同的选项。

一种可能性是只比较 ascii 值,像这样

bool isLarger(string s1, string s2)
{ 
return Enumerable.Range(0, Math.Min(s1.Length, s2.Length)).SkipWhile(i => s1[i] == s2[i]).Select(i => s1[i] > s2[i]).FirstOrDefault();
}

为了进行良好的比较,这里有许多选项,例如:http: //msdn.microsoft.com/en-us/library/system.globalization.compareinfo (v=vs.80).aspx

于 2013-04-07T10:19:22.733 回答