我觉得这对于插入排序来说效率太低了。我见过的大多数实现都会有一个while循环代替我的第二个for循环。除此之外,那些while循环将在我的代码中终止一次j,或等效的,等于零,或者在我的代码的for循环中找到的if语句被执行。问题是每当我尝试实现这样的代码时,我的插入排序都无法正常工作。
getVisitCount只返回类网页的整数。 AL是一个ArrayList。
public void IS()
{
Console.WriteLine("Sorting ArrayList.");
for (int i = 1; i < AL.Count; i++)
{
for (int j = i; j > 0; j--)
{
Webpage EntryJ = (Webpage)AL[j];
Webpage EntryBefore = (Webpage)AL[j - 1];
if (EntryBefore.getVisitCount() < EntryJ.getVisitCount())
{
Webpage temp = EntryBefore;
AL[j - 1] = AL[j];
AL[j] = temp;
}
}
}
答案 0 :(得分:0)
如果需要对数组列表进行排序,可以将其转换为特定类型,然后将其转换为列表。使用列表,您只需调用LINQ OrderBy即可获得有序列表:
public class Webpage
{
public int getVisitCount()
{
return DateTime.Now.Second * 2;
}
public static List<Webpage> Sort(ArrayList AL)
{
var list = AL.Cast<Webpage>().ToList();
var ordered = list.OrderBy(x => x.getVisitCount());
return list;
}
}
答案 1 :(得分:-1)
以下是您的代码正在执行的操作:
int[] AL = { 4, 3, 2, 1 };
for (int i = 1; i < AL.Count(); i++)
{
for (int j = i; j > 0; j--)
{
if (AL[j-1] < AL[j])
{
int temp = AL[j -1];
AL[j - 1] = AL[j];
AL[j] = temp;
}
Console.WriteLine("i = '{0}', j = '{1}', array = '{2}'", i.ToString(), j.ToString(),string.Join(",", AL.Select(x => x.ToString())));
}
}
Console.ReadLine();