【问题标题】:Can insertion sort be post order?插入排序可以是后序吗?
【发布时间】:2015-09-02 21:58:51
【问题描述】:
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
    }

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

【问题讨论】:

  • 我不熟悉您在这里使用“in-order”和“post-order”。你能解释一下你的意思吗?你是问在当前做工作是否正常,然后做递归而不是递归到完全深度并在出路时做工作?
  • @JimMischel 没错!如果代码没有首先深入,它不会被限定为递归吗?
  • 没有什么说递归必须首先深入。例如,考虑如何递归地扫描目录树。您将访问目录节点,然后访问它的所有子节点。或者对二叉树进行预排序或中序扫描。两者都是递归的。

标签: algorithm sorting tree inorder postorder


【解决方案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);
    }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-04
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多