|
A[N]を利用したヒープのプログラムを作りました。
A[i]の親は、A[(i-1)/2]であるヒープです。
(上に行くほど小さい整数を格納)
そしていまある整列されたヒープのなかからキーボードから入力した値xを検索する関数findを、
x ←検索する値
A[]←ヒープソートされた配列
n ←現在格納されているA[]の最後の添え字
として、
int find(int x, int *A, int i, int n)
{
int p,q;
if(A[i] == x){
return i;
}
if(i>n){
return -1;
}
if(A[i]<x){
i = i*2 + 1;
p = find(x, A, i, n);
if(p > -1){
return p;
}
i++;
q = find(x, A, i, n);
if(q > -1){
return q;
}
}
return -1;
}
呼び出す際に、find(x,A,0,n)と与えることによりfind関数はxを格納しているA[p]のpを返すというものです。
いちおうこれで返すようにはなったのですが、アルゴリズムはあっているでしょうか。それとなんかもっとキレイに書けないでしょうか。
自信が無いので質問してみました
|