使用C#重新排序整数位

yq8*_*yq8 0 c# sorting numbers int32

我想问一下如何重新排序数字,Int32这样就可以得到最大的数字.这是一个可视化我想要做的事情的例子:

2927466  -> 9766422
12492771 -> 97742211
Run Code Online (Sandbox Code Playgroud)

我想在不使用System.Linq命名空间的情况下执行数字的排序,而不将整数转换为字符串值.这是我到目前为止所得到的:

public static int ReorderInt32Digits(int v)
    {
        int n = Math.Abs(v);
        int l = ((int)Math.Log10(n > 0 ? n : 1)) + 1;
        int[] d = new int[l];
        for (int i = 0; i < l; i++)
        {
            d[(l - i) - 1] = n % 10;
            n /= 10;
        }
        if (v < 0)
            d[0] *= -1;
        Array.Sort(d);
        Array.Reverse(d);
        int h = 0;

        for (int i = 0; i < d.Length; i++)
        {
            int index = d.Length - i - 1;
            h += ((int)Math.Pow(10, index)) * d[i];
        }
        return h;
    }
Run Code Online (Sandbox Code Playgroud)

这个算法完美无缺,但我觉得效率不高.我想知道是否有办法更有效地做同样的事情以及如何改进我的算法.

Pey*_*man 8

您可以使用此代码:

var digit = 2927466;
String.Join("", digit.ToString().ToCharArray().OrderBy(x => x));
Run Code Online (Sandbox Code Playgroud)

要么

var res = String.Join("", digit.ToString().ToCharArray().OrderByDescending(x => x) );
Run Code Online (Sandbox Code Playgroud)

  • 欢迎@ yq8,抱歉,我没有看到.你有什么理由不想使用Linq吗? (2认同)