algorithmic和algorithmicx
介绍下algorithmic和algorithmicx,这两个包很像,很多命令都是一样的,只是algorithmic的命令都是大写,algorithmicx的命令都是首字母大写,其他小写(EndFor两个大写)。下面是algorithmic的基本命令
\STATE <text>
\IF{<condition>} \STATE{<text>} \ENDIF
\FOR{<condition>} \STATE{<text>} \ENDFOR
\FOR{<condition> \TO <condition> } \STATE{<text>} \ENDFOR
\FORALL{<condition>} \STATE{<text>} \ENDFOR
\WHILE{<condition>} \STATE{<text>} \ENDWHILE
\REPEAT \STATE{<text>} \UNTIL{<condition>}
\LOOP \STATE{<text>} \ENDLOOP
\REQUIRE <text>
\ENSURE <text>
\RETURN <text>
\PRINT <text>
\COMMENT{<text>}
\AND, \OR, \XOR, \NOT, \TO, \TRUE, \FALSE
对比看一下,下面是algorithmicx包的基本命令
\State <text>
\If{<condition>} <text> \EndIf
\If{<condition>} <text> \Else <text> \EndIf
\If{<condition>} <text> \ElsIf{<condition>} <text> \Else <text> \EndIf
\For{<condition>} <text> \EndFor
\ForAll{<condition>} <text> \EndFor
\While{<condition>} <text> \EndWhile
\Repeat <text> \Until{<condition>}
\Loop <text> \EndLoop
\Require <text>
\Ensure <text>
\Function{<name>}{<params>} <body> \EndFunction
\State \Return <text>
\Comment{<text>}
另外,还有3个修改algorithm标签,require标签,ensure标签显示的三个命令:
\floatname{algorithm}{算法}
\renewcommand{\algorithmicrequire}{\textbf{输入:}}
\renewcommand{\algorithmicensure}{\textbf{输出:}}
algorithmicx例子
\documentclass
[11pt]{article}
\usepackage
{CJK}
\usepackage
[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry}
\usepackage
{algorithm}
\usepackage
{algorithmicx}
\usepackage
{algpseudocode}
\usepackage
{amsmath}
\floatname
{algorithm}{算法}
\renewcommand
{
\algorithmicrequire
}{
\textbf
{输入:}}
\renewcommand
{
\algorithmicensure
}{
\textbf
{输出:}}
\begin
{document}
\begin
{CJK*}{UTF8}{gkai}
\begin
{algorithm}
\caption
{用归并排序求逆序数}
\begin
{algorithmic}[1]
%每行显示行号
\Require
$Array$数组,$n$数组大小
\Ensure
逆序数
\Function
{MergerSort}{$Array, left, right$}
\State
$result
\gets
0$
\If
{$left < right$}
\State
$middle
\gets
(left + right) / 2$
\State
$result
\gets
result +$
\Call
{MergerSort}{$Array, left, middle$}
\State
$result
\gets
result +$
\Call
{MergerSort}{$Array, middle, right$}
\State
$result
\gets
result +$
\Call
{Merger}{$Array,left,middle,right$}
\EndIf
\State
\Return
{$result$}
\EndFunction
\State
\Function
{Merger}{$Array, left, middle, right$}
\State
$i
\gets
left$
\State
$j
\gets
middle$
\State
$k
\gets
0$
\State
$result
\gets
0$
\While
{$i<middle$
\textbf
{and} $j<right$}
\If
{$Array[i]<Array[j]$}
\State
$B[k++]
\gets
Array[i++]$
\Else
\State
$B[k++]
\gets
Array[j++]$
\State
$result
\gets
result + (middle - i)$
\EndIf
\EndWhile
\While
{$i<middle$}
\State
$B[k++]
\gets
Array[i++]$
\EndWhile
\While
{$j<right$}
\State
$B[k++]
\gets
Array[j++]$
\EndWhile
\For
{$i = 0
\to
k-1$}
\State
$Array[left + i]
\gets
B[i]$
\EndFor
\State
\Return
{$result$}
\EndFunction
\end
{algorithmic}
\end
{algorithm}
\end
{CJK*}
\end
{document}
正好学着用algorithmicx写了下归并排序求逆序数,代码如下
注:公式内的空格用“~~” 如:$\alpha \gets i~~i\in(0,1)$