]> ruin.nu Git - germs.git/blobdiff - src/genesorter.cpp
Small optimization in sort()
[germs.git] / src / genesorter.cpp
index 602a6dde276318e069fa8e1496c005110e9b27d4..3198543fae391f4805211406a5f8f76ccf28c889 100644 (file)
@@ -41,7 +41,8 @@ struct ScoreCmp {
 GeneSorter::ActionList GeneSorter::sort(const GeneOrder& go, const Model& m){
        ActionList al;
        GeneOrder temp(go);
-       while(inversionDistance(temp) > 0){
+       size_t dist = inversionDistance(temp);
+       while(dist > 0){
                //cout << "Distance: " << inversionDistance(temp) << " : ";
                //copy(temp.begin(), temp.end(), ostream_iterator<int>(cout, " "));
                //cout << endl;
@@ -49,11 +50,12 @@ GeneSorter::ActionList GeneSorter::sort(const GeneOrder& go, const Model& m){
                if (safe.size() > 0){
                        priority_queue<pair<double,SortAction>,vector<pair<double,SortAction> >, ScoreCmp > pq;
                        for (ActionList::iterator sa = safe.begin(); sa != safe.end(); ++sa){
-                               pq.push(pair<double,SortAction>(m.score(*sa),*sa));
+                               pq.push(pair<double,SortAction>(m.score(*sa,temp),*sa));
                        }
                        SortAction sa = pq.top().second;
                        sa(temp);
                        al.push_back(sa);
+                       --dist;
                }else
                        return ActionList(); //TODO: Need to handle hurdles.
        }