簡體   English   中英

插入排序可以是后序嗎?

[英]Can insertion sort be post order?

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
    }

它可以被認為是插入排序嗎? 還是應該有序? 按順序使用遞歸算法是一種普遍的做法嗎?如果是這樣,為什么會這樣?

問題中的示例代碼是尾遞歸版本,編譯器可以將其優化為循環(無遞歸)。 我通過一些小的清理將示例代碼轉換為 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);
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM