[英]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.