我是一名学生,并获得了增强型插入排序的伪代码,但我真的很难将其转换为C#。
伪代码:
- 计算长度n
- var i = 1,j
- if(a [i]< a [i-1]),然后
- if(a [i]< a [0]),然后
- 设置j = 0和goto-35
- 其他j = i / 2和goto-10
- 结束如果
- 其他i ++和repeat-3
- 结束如果
- if(a [i]
- elseif(if(a [i] = = a [j]),然后
- 设置j = j + 1和goto-35
- 结束如果
- 其他goto-25
- 结束如果
- while((j-1)> = 0),执行
- j = j-2且if(a [i]> a [j]),则
- if(a [i]< a [j + 1]),然后
- 设置j = j + 1和goto-35
- else set j = j + 2 and goto-35
- 结束如果
- else if(a [i] = = a [j]),然后
- 设置j = j + 1和goto-35
- 其他返回
- 虽然(((i-1)-j)> = 0),但
- J = j + 2且(a [i]
- 如果(a [i]< a [j-1]),那么
- 设置j = j-1和goto-35
- 另外设置j + j + 0和goto-35
- 结束如果
- 否则if(a [i] = = a [j]),那么
- 设置j = j + 1和goto-35
- 其他返回
- 结束如果
- 交换[i]和[j]
- J ++
- while(j = i-1),做
- i ++和goto-3
- END
醇>
到目前为止,我用C#编写的是:
static public void EnhancedInsertionSort(ArrayList List)
{
int n = List.Count;
int i = 1;
int j = i-1;
do
{
if (((Webpage)List[i]).getVisits() < ((Webpage)List[i - 1]).getVisits())
{
if (((Webpage)List[i]).getVisits() < ((Webpage)List[0]).getVisits())
{
j = 0;
object temp = List[i];
List[i] = List[j];
List[j] = temp;
j++;
}
else
j = i / 2;
}
else
i++;
if (((Webpage)List[i]).getVisits() < ((Webpage)List[j]).getVisits())
{
while ((j - 1) >= 0)
{
j = j - 2;
if (((Webpage)List[i]).getVisits() > ((Webpage)List[j]).getVisits())
{
if (((Webpage)List[i]).getVisits() < ((Webpage)List[j + 1]).getVisits())
{
j = j + 1;
object temp = List[i];
List[i] = List[j];
List[j] = temp;
j++;
}
}
else
{
if (((Webpage)List[i]).getVisits() == ((Webpage)List[j]).getVisits())
j = j + 1;
else return;
}
}
}
else
if (((Webpage)List[i]).getVisits() == ((Webpage)List[j]).getVisits())
j = j + 1;
} while (j == i-1);
}
但是现在我完全被困惑了。我确信我已经犯了一些解释错误,因为我正在努力与#34; goto&#34;关键字以及如何将它们转换为C#循环。我已经研究了这个,并且理解了基本的想法,但是在一个算法中使用了很多goto
个关键字,我发现这个过程非常混乱。
我真的很感激任何人都能提供的任何帮助!
注意:我正在尝试按属性Visits(整数值)的降序对对象的ArrayList(&#34;网页&#34;)进行排序。
答案 0 :(得分:0)
伪代码是一项旧发明,而伪代码尚未更新为现代语言。我相信旧的GOTO语句应该替换为调用子程序(或函数)来执行小函数。例如:
static public void EnhancedInsertionSort(ArrayList List)
{
int n = List.Count;
int i = 1;
int j = i-1;
do
{
if ( pageWithLessVisits(List[i], List[i - 1]) )
{
if ( pageWithLessVisits(List[i], List[0]) )
{
j = 0;
object temp = List[i];
List[i] = List[j];
List[j] = temp;
j++;
}
else
j = i / 2;
}
else
i++;
if (pageWithLessVisits(List[i],List[j]))
{
while ((j - 1) >= 0)
{
j = j - 2;
if (pageWithMoreVisits(List[i], List[j]))
{
if (pageWithLessVisits(List[i],List[j + 1]))
{
j = j + 1;
object temp = List[i];
List[i] = List[j];
List[j] = temp;
j++;
}
}
else
{
if (pageWithEqualVisits(List[i], List[j]))
j = j + 1;
else return;
}
}
}
else
if (pageWithEqualVisits(List[i], List[j]))
j = j + 1;
} while (j == i-1);
}
static private bool pageWithLessVisits(Webpage page1, Webpage page2)
{
return page1.getVisits() < page2.getVisits()
}
static private bool pageWithMoreVisits(Webpage page1, Webpage page2)
{
return page1.getVisits() > page2.getVisits()
}
static private bool pageWithEqualVisits(Webpage page1, Webpage page2)
{
return page1.getVisits() == page2.getVisits()
}
您甚至可以在de IF中封装小代码。使代码与伪代码一样清晰。