C# 为什么我的排序算法不能正确排序数组中的所有值?

C# 为什么我的排序算法不能正确排序数组中的所有值?,c#,arrays,C#,Arrays,我已经创建了一个排序算法来对程序中的数组进行排序。该算法对大多数数组进行了精细排序,但是数组末尾附近的一些值根本不在正确的位置 string temp; int counter = 0; do { for (int i = 0; i < low256.Length - 1; i++) { for (int j = i + 1; j < low256.Length; j++) { counter += 1;

我已经创建了一个排序算法来对程序中的数组进行排序。该算法对大多数数组进行了精细排序,但是数组末尾附近的一些值根本不在正确的位置

string temp;
int counter = 0;
do
{
    for (int i = 0; i < low256.Length - 1; i++)
    {
        for (int j = i + 1; j < low256.Length; j++)
        {
            counter += 1;
            if (string.Compare(low256[i], low256[j]) == -1)
            {
                temp = low256[i];
                low256[i] = low256[j];
                low256[j] = temp;
                counter = 0;
            }
        }
    }
} while (counter <= 255);

foreach(string value in low256)
{
    Console.Write(value + " ");
}

正如您所看到的,它返回的数组中有些值位于错误的位置,例如0.4236放在-0.4180之前。

在内部循环中,您可以解析需要比较的项目:

for (int j = i + 1; j < low256.Length; j++)
{
    counter += 1;
    var a = double.Parse(low256[i]);
    var b = double.Parse(low256[j]);
    if (a.CompareTo(b) == 1) // change to -1 to order by descending
    // rest of code

此外,在字符串表示中对数字进行排序也是个坏主意。因此,最好先将
low256
中的所有项目转换为双倍,然后执行所需操作

这些实际上是字符串而不是数字??://///什么是
low256
的项目类型?是绳子吗?
low256
中的所有项目在字符串表示中是否都是浮点/双精度的?如果所有答案都是“是”,只需使用
double.Parse
并比较项目,因为numbersYes low256是一个字符串数组。我应该把double.Parse放在我的代码中的什么地方对不起?排序的结果绝对没有问题-看起来很好-你显然确认了
string.Compare(“0.4236”,“0.4180”)==string.Compare(“0.4236”,“0.4180”)
是真的(默认字符串比较忽略了
-
)由于您选择了字符串比较,因此对
“12”<“2”
也很满意。这可能是重复的一些-除非你真的想排序数字…是的,我试图排序数字,但我不能改变数据类型为十进制,例如,因为我得到一个System.Format异常,我不能使用简单的运算符,如感谢你帮一个新手出Aleks,我将在未来的编码项目中记住这一点。
for (int j = i + 1; j < low256.Length; j++)
{
    counter += 1;
    var a = double.Parse(low256[i]);
    var b = double.Parse(low256[j]);
    if (a.CompareTo(b) == 1) // change to -1 to order by descending
    // rest of code
low256 = low256
  .Select(double.Parse)
  .OrderBy(x => x)
  .Select(x => x.ToString("0.0000"))
  .ToArray();