Xinok , dans le message (digitalmars.D.learn:30054), a écrit : > 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
You should look at: std.algorithm.SetUnion std.algorithm.swapRanges -- Christophe