如何从包含十进制值的文本文件中修复浮点数组的气泡排序代码



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

我已经在现有数组上使用了这种气泡排序并且它有效,但它不适用于我从字符串转换的浮点数组。为什么这行不通?

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"))

除了你可以用一行(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( 加载到内存中后。请注意,它可以对任何可以与其自身(在本例中为 float(进行比较的内容进行排序。

稍微修改一下:

   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);

将工作

最新更新