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}
最后的排版结果如下: