使用Sort算法对字符串列表进行排序

时间:2013-04-07 10:06:53

标签: c# string algorithm list sorting

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

我知道我可以简单地使用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;
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

您可以像int分拣机一样完成此操作,而不是

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

你会用

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

Microsoft提供了几个standard string comparers,例如使用当前文化的那些,不变文化,忽略大小写等等。

如果你想编写自己的比较函数,最简单的方法是在for循环中遍历两个字符串,并将每个字符相互比较。但是我不建议这样做,除非它仅用于学习目的,因为让你自己的比较能够正确地处理unicode和不同语言的所有极端情况非常困难。

答案 1 :(得分: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