我正在使用冒泡排序算法对从文本文件中获取的浮点值列表进行排序。此冒泡排序代码适用于其他阵列,但不适用于此阵列;它只显示文本文件中的第一个值。
我已经在现有数组上使用了这个冒泡排序并且它可以工作,但它对我从字符串转换的浮点数组不起作用。为什么这不起作用?`
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),它使用更高效的Quicksort)按顺序获取数组的事实,你在那里(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);
将工作