public class insSort {
int i,j,key; //j=1
public void rec(int a[],int pos){
if(pos>a.length-1){
return;
}
key= a[pos];
i=pos-1;
while((i>=0)&&(a[i]>key)){//swapping
a[i+1]=a[i];
i--;
a[i+1]=key;
}
pos++;
rec(a,pos);//post order
}
它可以被视为插入排序吗?还是应该是有序的? 按顺序使用递归算法是一种普遍的做法吗?如果是这样,为什么会这样呢?
答案 0 :(得分:1)
问题中的示例代码是尾递归版本,编译器可以将其优化为循环(无递归)。我将示例代码转换为C ++,并进行了一些小的清理。初始调用应该是rec(1)(pos的初始值== 1)。
class insSort
{
public:
int a[8];
void rec(int pos){
int i,value;
if(pos >= (sizeof(a)/sizeof(a[0])))
return;
value = a[pos]; // get value
i = pos-1;
while((i >= 0) && (a[i] > value)){ // shift up
a[i+1] = a[i];
i--;
}
a[i+1] = value; // insert value
pos++;
rec(pos);
}
};