选择字符串排序

问题描述 投票:5回答:2

好的,我一直在使用此代码对整数进行选择排序:

public void selectSort(int [] arr)
{
    //pos_min is short for position of min
    int pos_min,temp;

    for (int i=0; i < arr.Length-1; i++)
    {
        pos_min = i; //set pos_min to the current index of array

        for (int j=i+1; j < arr.Length; j++)
        {
            if (arr[j] < arr[pos_min])
            {
                //pos_min will keep track of the index that min is in, this is needed when a swap happens
                pos_min = j;
            }                                          
        }

        //if pos_min no longer equals i than a smaller value must have been found, so a swap must occur
        if (pos_min != i)
        {
            temp = arr[i];
            arr[i] = arr[pos_min];
            arr[pos_min] = temp;
        }
    }
}

但是现在我想在字符串列表上运行相同的算法。怎么能做到?感觉真的很尴尬,就像您需要其他循环来比较不同字符串的多个字符时一样。我做了很多尝试,但没有任何有用的建议。 :/

注意:我知道,选择排序不是很有效。这仅用于学习目的。我不是在寻找已经包含在C#中的替代算法或类。 ;)

c# string list sorting selection-sort
2个回答
9
投票

IComparable是一个接口,为我们提供了一个称为CompareTo的函数,该函数是比较运算符。该运算符适用于实现IComparable接口的所有类型,其中包括整数和字符串。

// Forall types A where A is a subtype of IComparable
public void selectSort<A>(A[] arr)
where A : IComparable
{
    //pos_min is short for position of min
    int pos_min;
    A temp;

    for (int i=0; i < arr.Length-1; i++)
    {
        pos_min = i; //set pos_min to the current index of array

        for (int j=i+1; j < arr.Length; j++)
        {
            // We now use 'CompareTo' instead of '<'
            if (arr[j].CompareTo(arr[pos_min]) < 0)
            {
                //pos_min will keep track of the index that min is in, this is needed when a swap happens
                pos_min = j;
            }                                          
        }

        //if pos_min no longer equals i than a smaller value must have been found, so a swap must occur
        if (pos_min != i)
        {
            temp = arr[i];
            arr[i] = arr[pos_min];
            arr[pos_min] = temp;
        }
    }
}

2
投票

System.String类具有静态的int Compare(string, string)方法,如果第一个字符串小于第二个字符串,则返回负数;如果相等,则返回零;如果第一个字符串大于则返回正数。

用“较小”表示,它按词法顺序排在另一个之后,而按较大词法按词法顺序排在另一个之后。

因此,您可以比较int Compare(string, string)而不是整数的String.Compare(arr[j], arr[pos_min]) < 0

© www.soinside.com 2019 - 2024. All rights reserved.