2.5.27

上次更新:2019-04-17
发现了题解错误/代码缺陷/排版问题?请点这里:如何:提交反馈

解答

类似于索引排序的做法,访问数组都通过一层索引来间接实现。
首先创建一个数组 index,令 index[i] = i
排序时的交换变成 index 数组中元素的交换,
读取元素时使用 a[index[i]] 而非 a[i]

代码

/// <summary>
/// 间接排序。
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="keys"></param>
/// <returns></returns>
static int[] IndirectSort<T>(T[] keys) where T : IComparable<T>
{
    int n = keys.Length;
    int[] index = new int[n];
    for (int i = 0; i < n; i++)
        index[i] = i;

    for (int i = 0; i < n; i++)
        for (int j = i; j > 0 && keys[index[j]].CompareTo(keys[index[j - 1]]) < 0; j--)
        {
            int temp = index[j];
            index[j] = index[j - 1];
            index[j - 1] = temp;
        }
    return index;
}
上一题 下一题