1

私はユニに対してこの割り当てを行っています。要件は、並べ替えアルゴリズムを使用してリストをアルファベット順に並べ替えることです (大文字と小文字を区別しません)。基本的に、リストに「a」「C」「b」「1」および「3」などの文字列が含まれている場合、「1」「3」「a」「b」「C」または「」のいずれかにソートされます。 a" "b" "C" "1" "3" 整数の配列をソートする方法は知っていますが (交換ソートを使用した以下のコード)、代わりに文字列のリストを使用するにはどうすればよいですか? 以下のコードを変更して、交換ソートの原則を維持しながら文字列のリストをアルファベット順にソートするにはどうすればよいですか (この場合)。

注: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

1 に答える 1

3

おそらく、文字列を char ごとに比較する必要があります。

擬似コード:

for each I from 0 to (shorter string's length - 1):
    if left[I] is a letter and right[I] isn't (or vice versa):
        the string that has a letter at [I] is "less"
        done
    else:
        ("true" here means ignore case)
        (you could also say `StringComparison.InvariantCultureIgnoreCase`, but eh)
        result = String.Compare(left, I, right[I], I, 1, true)
        if result < 0
            left is "less"
        else if result > 0
            right is "less"
        else
            (both strings are equal so far)
            next I

(if you're here, the strings are "equal" up to this point)

if both strings have the same length:
    they're equal
else:
    the longer string is "greater"
于 2013-03-17T06:26:32.253 に答える