我正在研究我正在研究的一個哈夫曼編碼項目的快速排序算法(解釋爲什麼所有的函數名稱都以huff開頭)。當用調試器遍歷它時,函數似乎在找到最高項時凍結(當試圖從該向量的右側找到「不應該」在該側的項時)。這個代碼可能有(可能是)其他問題,但我現在專注於此。順便說一下,大部分時間(所有的時候)我都會調用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());
}
編輯:我想我會添加這個,因爲沒有人回答這個問題呢。如果代碼「應該」工作,然後評論(這樣我可以尋找一個理由爲什麼它不會工作)之外的原因。
爲什麼你就不能使用隨C中的qsort函數++? – anio 2012-07-20 18:59:45
@anio主要原因是我在學習,而不是爲了工作。另一個原因是它是一個指針向量(所以我不能使用sort())。 – 2012-07-20 19:02:08
你爲什麼要做b-e + 1而不是e-b + 1 – Yakov 2012-07-20 19:02:35