插入排序可以下单吗?

时间:2015-09-02 21:58:52

标签: algorithm sorting tree inorder postorder

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
    }

它可以被视为插入排序吗?还是应该是有序的? 按顺序使用递归算法是一种普遍的做法吗?如果是这样,为什么会这样呢?

1 个答案:

答案 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);
    }
};