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