Ranges help
    Xinok 
    xinok at live.com
       
    Wed Oct 12 11:23:10 PDT 2011
    
    
  
This is in relation to my sorting algorithm. This is what I need to 
accomplish with ranges in the most efficient way possible:
1. Merge sort - This involves copying elements to a temporary buffer, 
which can simply be an array, then merging the two lists together. The 
important thing is that it may merge left to right, or right to left, 
which requires a bidirectional range.
c[] = a[0..$/2];
foreach(a; arr) if(!b.empty && !c.empty) if(b.front <= c.front){
	a = b.front; b.popFront();
} else{
	a = c.front; c.popFront();
}
2. Range swap - First, I need to do a binary search, which requires a 
random access range. Then I need to swap two ranges of elements.
while(!a.empty && !b.empty){
	swap(a.front, b.front);
	a.popFront(); b.popFront();
}
That's the best I can come up with. I'm wondering if there's a more 
efficient way to accomplish what I have above.
I also need to figure out the template constraints. Would this be 
correct? Or would this be too much?
isRandomAccessRange && !isFiniteRange && isBidirectionalRange && hasSlicing
    
    
More information about the Digitalmars-d-learn
mailing list