Yeah, I was talking about a stable quicksort, like we see at
https://code.jsoftware.com/wiki/Essays/Quicksort

I guess if you don't care about search stability you can eliminate the
equality test against the pivot value.

Thanks,

-- 
Raul

On Thu, Dec 21, 2023 at 5:07 PM Elijah Stone <elro...@elronnd.net> wrote:
>
> The quicksort I know does not care whether elements are out of order.
> Example:
>
>     qs=. {{ NB.quicksort adverb; u compare, y array
> if. 1>:#~.y do. y return. end. NB.ignore ~.
> p=. y{~?#y
> s=. y u"_1 _ p
> (u qs s#y) , (u qs (-.s)#y) }}
>     <qs 10?@$10
> 0 0 2 3 3 3 6 6 9 9
>     (<qs -: /:~) 10?@$10
> 1
>
> It is unstable, but that is to be expected.  And it can be made stable without
> comparing for equality by pairing every element with its index.
>
> On Thu, 21 Dec 2023, Raul Miller wrote:
>
> > It's probably worth noting here that (for example) the quicksort
> > algorithm relies on being able to tell whether items are equal. And a
> > 0 1 result can't distinguish between ordering and equality. Many
> > sorting implementations rely on a _1, 0, 1 result, as a consequence.
> >
> > That said, you could implement a sorting algorithm like bubble sort
> > using a 0/1 result, and that could be a verb. (Also... rosettacode.org
> > is currently down, due to a name server issue, but when it is up it
> > has a decent collection of sorting algorithms implemented in J, and I
> > think some of them could also be pressed into service here).
> >
> > Meanwhile, for aoc2023 day 7, the part 1 hand ranker could have been
> > {{ (\:~ #/.~ y),'23456789TJQKA' i. y }}"1 (part 2 was slightly more
> > complicated and of course migrated the 'J' to the first element of
> > that character list.
> >
> > I hope this helps,
> >
> > --
> > Raul
> >
> > On Thu, Dec 21, 2023 at 9:03 AM 'Viktor Grigorov' via Programming
> > <programm...@jsoftware.com> wrote:
> >>
> >> Hey,
> >>
> >> Is there an easy way to sort an array with verb  returning either 0 or 1, 
> >> like the comparison primitives?
> >>
> >> The verb that I'd in mind relates to the 2023's advent of code's day 7: 
> >> given two equal length hands, which one has the first high card. Which one 
> >> can write as:
> >>
> >>    'K2345' ( 2 | 0 { [: I. [: , [: (<,.>)/ ,: & ('23456789TJQKA'i.]) ) 
> >> 'KJ2KA'
> >> 0 NB. here meaning left is not greater right
> >>
> >> Cheers,
> >> ----------------------------------------------------------------------
> >> For information about J forums see http://www.jsoftware.com/forums.htm
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to