safeActions() is guaranteed to only return actions that reduces the inversion
distance by one, so we don't have to compute the inversion distance at
each step.
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;
SortAction sa = pq.top().second;
sa(temp);
al.push_back(sa);
+ --dist;
}else
return ActionList(); //TODO: Need to handle hurdles.
}