【问题标题】:How to fix my bubble sort code for my float array from a text file containing decimal values如何从包含十进制值的文本文件中修复我的浮点数组的冒泡排序代码
【发布时间】:2019-04-04 08:48:58
【问题描述】:

我正在使用冒泡排序算法对从文本文件中获得的浮点值列表进行排序。此冒泡排序代码适用于其他数组,但不适用于这个;它只显示文本文件中的第一个值。

我在现有数组上使用了这种冒泡排序,它可以工作,但它不适用于我从字符串转换而来的浮点数组。为什么这不起作用?`

while(line != null)
{
    int temp = 0;

    for (int write = 0; write < x.Length; write++)
    {
        for (int sort = 0; sort < x.Length - 1; sort++)
        {
            if (x[sort] > x[sort + 1])
            {
                temp = (int)x[sort + 1];
                x[sort + 1] = x[sort];
                x[sort] = temp;
            }
        }
    }

    for (int i = 0; i < x.Length; i += 1)
    {
        Console.Write(x[i] + " ");
    }

    line = br.ReadLine();
    Console.ReadKey();
}

这里是将字符串转换为x值的代码:

 string line = br.ReadLine();
 float [] x = Array.ConvertAll(line.Split(','), float.Parse);

这是执行文件转换的代码:

            using (StreamReader br = new StreamReader("file.txt"))

【问题讨论】:

  • 请显示将line 转换为x 数组的代码行
  • 我现在编辑了问题以显示该代码
  • 请显示您的文件内容和完整的转换代码

标签: c# arrays floating-point streamreader bubble-sort


【解决方案1】:

除了您可以用一行(Array.Sort(x),它使用更高效的快速排序)来按顺序获取数组这一事实之外,您所拥有的 (1) 不是冒泡排序和 (2 ) 仅适用于整数。您的临时交换变量是一个整数,因此交换时值将始终转换为整数。你需要这样的东西:

   public class BubbleSort<T> where T : IComparable<T>
   {
      public static T[] Sort(T[] array)
      {
         for (var i = array.Length - 1; i > 0; i--)
         {
            for (var j = 0; j < i; j++)
            {
               if (((IComparable<T>)array[j]).CompareTo(array[j + 1]) > 0)
               {
                  var swapVar = array[j + 1];
                  array[j + 1] = array[j];
                  array[j] = swapVar;
               }
            }
         }
         return array;
      }
   }

像这样使用它:

BubbleSort<float>.Sort(x);

将数组 (X) 加载到内存后。请注意,它可以对可以与其自身进行比较的任何内容(在本例中为浮点数)进行排序。

稍微修改一下:

   public static class BubbleSort
   {
      public static T[] Sort<T>(T[] array) where T : IComparable<T>
      {
         for (var i = array.Length - 1; i > 0; i--)
         {
            for (var j = 0; j < i; j++)
            {
               if (((IComparable<T>)array[j]).CompareTo(array[j + 1]) > 0)
               {
                  var swapVar = array[j + 1];
                  array[j + 1] = array[j];
                  array[j] = swapVar;
               }
            }
         }
         return array;
      }
   }

这样会自动推断数组的类型

BubbleSort.Sort(x);

会起作用

【讨论】:

  • 我知道内置的排序方法,但我想实现自己的冒泡排序算法。我试图在上面实现您的代码,但未能实现我想要的。我希望算法接受我用来创建用于排序算法的数组的变量。
  • 谢谢,我已经实现了这个,但我不确定排序后的数组在控制台上的显示位置
  • 在你调用 BubbleSort.Sort(x) 之后,你自己来做
  • 这样做之后,控制台仍然只显示数组的第一个值
  • 尝试 (int i = 0; i
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 2011-04-24
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多