我正在尝试在我的一个程序中实现Insertion排序。我一直在尝试创建的是一个排序程序(按升序或降序排列)但是我尝试使用快速排序和合并排序等算法,我对c#和编码很新。我在这里遇到的问题是我的文件包括一串代码,以及一个双/整数(例如:75.350,74.430,星期四,星期五),因为这个算法是为整数设计的。有没有办法转换它?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
StreamReader sh1Open = new StreamReader("c:..\\Files\\SH1_Open.txt");
string Sh1OpenString = sh1Open.ReadToEnd();
int[] x = { Convert.ToInt32(Sh1OpenString) };
int j;
int temp;
for (int i = 1; i < x.Length; i++)
{
j = i - 1;
while (j >= 0 && x[j]>x[j+1])
{
temp = x[j];
x[j] = x[j + 1];
x[j + 1] = temp;
j = j - 1;
}
}
for (int i = 0; i < x.Length; i++)
{
Console.WriteLine(x[i]);
}
Console.ReadKey();
}
}
}
答案 0 :(得分:2)
最好的方法可能是使用带有IComparable约束的泛型方法。
T[] InsertionSort(T[] x) where T : IComparable<T>
{
for (int i = 0; i < x.Length-1; i++)
{
int j = i+1;
while (j>0)
{
if (x[j-1].CompareTo(x[j]) > 1)
{
T temp = x[j-1];
x[j - 1] = x[j];
x[j] = temp;
}
j--;
}
}
return x;
}
或使用http://www.codecodex.com/wiki/Insertion_sort
中的算法static void InsertSort(IComparable[] array)
{
int i, j;
for (i = 1; i < array.Length; i++)
{
IComparable value = array[i];
j = i - 1;
while ((j >= 0) && (array[j].CompareTo(value) > 0))
{
array[j + 1] = array[j];
j=j-1;
}
array[j + 1] = value;
}
}
此外,这一行可能存在一个错误:
int[] x = { Convert.ToInt32(Sh1OpenString) };
因为你试图将整个文件转换为一个整数。
答案 1 :(得分:0)
由于在C#
中为string
定义了比较运算符,您只需将所有相关的int
变量替换为string
个变量即可。该算法应该运行相同(虽然有点慢)