私が取り組んでいるハフマンコーディングプロジェクトのクイックソートアルゴリズムに取り組んでいます(すべての関数名がハフで始まる理由を説明しています)。デバッガーを使用してウォークスルーすると、最高の項を見つけるときに関数がフリーズするように見えます(ベクトルの右側から、その側に「あるべきではない」項を見つけようとすると)。このコードには他にも問題がある可能性がありますが、今はこれに焦点を当てています。ちなみに、ほとんどの場合(常に)私はcoutと呼んでいますが、これはデバッグを目的としています。
編集:コメントから私のコードに多くの修正が加えられましたが、どれも私の問題を修正していません。そのため、コードを更新しています。
void huff_sort_partition(vector<Node*>* v, int b, int e){
int tempt = b+((rand()%(e-b))+1);
int p_idx = (*v)[tempt]->weight;
cout << tempt << endl;
int l = b+0;
int r = e;
cout << "P:" << p_idx << " L-R:" << l << "-" << r << endl;
while(l < r){
while((*v)[l]->weight < p_idx){
l++;
}
while((*v)[r]->weight > p_idx){
r--;
}
Node* s = (*v)[b+l];
(*v)[b+l] = (*v)[b+r];
(*v)[b+r] = s;
}
huff_sort_partition(v, b, l-1);
huff_sort_partition(v, l+1, e);
}
void Huff::huff_sort(vector<Node*>* v){
srand ( time(NULL) );
cout << "------sort------" << endl;
huff_sort_partition(v, 0, v->size());
}
編集:まだ誰もこれに答えていないので、私はこれを追加すると思いました。コードが「機能するはず」の場合は、コメントします(そうすれば、このコード以外の理由で機能しない理由を探すことができます)。