On Tuesday, 28 May 2013 at 18:38:01 UTC, Ali Çehreli wrote:
On 05/28/2013 11:31 AM, Ali Çehreli wrote:

>      @property Array!T opSlice(size_t i, size_t j) {
>          // ...
>          ret.front_ = i;
>
> I feel like the initialization of front_ above is not right
either.
> Imagine quick sort where we are slicing the right-hand side
of a range
> as [0..10], which has already been sliced before. Setting
front_ to 0
> would be wrong because then opIndex would still be counting
from the
> beginning of the original elements.

My explanation is wrong but I think there is still a bug. Imagine we are in the right-hand range that has been sliced as [10..$]. Now front_ is 10 and all is good: s[0] provides the arr[10] of the original array.

Now imagine our slice again by [5..$]. s_further[0] should provide arr[15] of the original array but your setting front_ to 5 would unfortunately provide arr[5].

Ali

Yes, exactly.

I believe, the same fix should be applied here: front_ + i, front_ + j. It passes the sorting test.

Thank you so much, Ali. Feels like to be back in school again.

Reply via email to