Historical Note

This page was migrated from the original p-nand-q.com site which was last updated in 2015. The content has been preserved exactly as it was, with only formatting updated for modern browsers. Over the coming days and weeks, the content will be reviewed and may be updated for accuracy and relevance. If you find any issues, please contact me.

Quicksort Best Practices

Being a modern business oriented language, C# lends itself ideally to generic implementations of abstract algorithms as the shit I don't know enough buzzwords sort algorithm everybody mistakenly names bubblesort. Sort of.

The following code shows how to do this is objectoriented C#. You can compare it with my python and Java and plain c solutions - you'll probably agree that C# compares favourably in terms of unlackingness. Speedwise however C is still unbeatable when it comes to tightly optimized non-recursive quicksorting

#region Using directives

using System;
using System.Collections.Generic;
using System.Text;

#endregion

namespace kicksort
{
    class quicksort
    {
        protected int __(object[] ______, int _______, _____ ________, int[] _)
        {
            switch (_______)
            {
                case _Oo:
                    _[_Oo] = _[_Oo] - o;
                    break;
                case o:
                    _[_o] = _______;
                   break;
               case o_:
                   return _[oo];
               case oo:
                   _[_Oo] = _[_Oo] + o;
                   break;
               case oO:
                   ______[__(______, o_, ________, _)] = ______[_[oO]];
                   goto case O; // BUG: ___OOOo? 
               case _o:
                   return _[_o];
               case ___o__o:
                   _[oo] = __(______, ___OoOo, ________, _) - o;
                   goto case ___O__o;
               case ___oO_O:
                   return (__(______, o_, ________, _) == _[oO]) ? o : __(______, ___oo_O, ________, _);
               case oooo:
                   ______[_[oO]] = ______[__(______, o_, ________, _)];
                   goto case O;
               case ___OooO:
                   __(______, __(______, __(______, __OoOO_, ________, _), ________, _), ________, _);
                   goto case ___oOoO;
               case O:
                   _[___o__o] = o;
                   break;
               case ___OOOo:
                   _______ = ___oOOo;
                   goto case oo;
               case ___oo_O:
                   return (________(______[__(______, __oOOo_, ________, _)], ____) > _Oo) ? oooo : _o;
               case __ooOo_:
                   goto case ___OooO;
               case __oOOo_:
                   return __(______, o_, ________, _);
               case Oo:
                   _[_[_Oo]] = _Oo;
                   goto case ___OOOo;
               case ___oOoO:
                   if (_[_o] == _Oo && _[___o__o] == _Oo)
                       goto case ___OooO;
                   __(______, ___OOOO, ________, _);
                   goto case ooo;
               case ___oOOo:
                   _[_[_Oo]] = ______.Length - o;
                   _______ = ___ooOO;
                   goto case oo;
               case __OoOO_:
                   _[oo] = __(______, o_, ________, _) + o;
                   return ___oO_O;
               case __ooOO_:
                   ____ = ______[_[o]];
                   goto case ___o__o;
               case ___oooo:
                   _[_[_Oo]] = _[oO] + o;
                   goto case oo;
               case ___Oooo:
                   return __(______, (________(______[_[oO]], ____) < _Oo) ? oO : o_, ________, _);
               case ___oO_o:
                   return _[oO] - o;
               case ___OoOO:
                   _[o] = _[_[__(______, _Oo, ________, _)]];
                   goto case ___oOoo;
               case ___O__o:
                   _[oO] = _[o];
                   _[_o] = _Oo;
                   return ___oooO;
               case ___OOOO:
                   _[___o__o] = _Oo;
                   return ___oOoO;
               case ___OOoO:
                   _[_[_Oo]] = __(______, ___OoOo, ________, _);
                   goto case ___Oo_O;
                case ___oo_o:
                    __(______, __(______, __(______, __(______, __ooOO_, ________, _), ________, _), ________, _), ________, _);
                    _[_[_Oo]] = _[o];
                    goto case oo;
                case ___OoOo:
                    return _[o_];
                case ___oOoo:
                    _[o_] = _[_[__(______, _Oo, ________, _)]];
                    return ___ooOo;
                case ___oooO:
                    if (_[_o] == _Oo)
                        goto case ___OOoo;

                    ______[_[oO]] = ____;
                    goto case ___OOoO;
                case ___oOOO:
                    return _[_[__(______, _Oo, ________, _)]];
                case ___Oo_O:
                    return __(______, ___Oo_o, ________, _);
                case ___OOoo:
                    __(______, __(______, ___OOOO, ________, _), ________, _);
                    goto case ___oooO;
                case O_:
                    __(______, __(______, ___OoOO, ________, _), ________, _);
                    goto case ___ooOO;
                case ___OO_O:
                    _[_[_Oo]] = __(______, ___oO_o, ________, _);
                    _______ -= Oo;
                    goto case oo;
                case ___ooOo:
                    if (__(______, ___OoOo, ________, _) < _[o])
                        goto case ___oo_o;
                    break;
                case ___O__O:
                    _[_Oo] = O;
                    return Oo;
                case ooo:
                    if (_[_o] == _Oo && _[___o__o] == _Oo)
                        goto case __________________________________________;
                    break;
                case ___OO_o:
                    return __(______, __(______, __(______, __(______, ___O__O, ________, _), ________, _), ________, _), ________, _);
                case ___Oo_o:
                    __(______, oo, ________, _);
                    return ___OO_O;
                case ___ooOO:
                    if (_[_Oo] > O)
                        goto case O_;
                    break;
                case __________________________________________:
                    _[oO] = __(______, ___oO_o, ________, _);
                    __(______, (_[oO] == __(______, o_, ________, _)) ? o : ___Oooo, ________, _);
                    goto case ooo;
            }
            return _______;
        }

        public quicksort(object[] O, _____ o)
        {
            __(O, ___OO_o, o, new int[___OO_O + O.Length]);
        }
        public delegate int _____(object a, object b);
        object ____;
        // TODO: add comments
        const int _Oo = o-o;
        const int o = 1;
        const int oo = o + o + o;
        const int ooo = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int oooo = o + o + o + o + o + o + o + o;
        const int O = o + o + o + o + o + o + o + o + o + o;
        const int oO = o + o + o + o;
        const int Oo = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int O_ = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int o_ = o + o;
        const int _o = o + o + o + o + o;
        const int ___O__O = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___o__o = o + o + o + o + o + o;
        const int ___O__o = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___oo_O = o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___Oo_O = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___oo_o = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___Oo_o = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___oO_O = o + o + o + o + o + o + o;
        const int ___OO_O = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___oO_o = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___OO_o = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___ooOO = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___OoOO = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___ooOo = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___OoOo = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___oOOO = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___OOOO = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___oOOo = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___OOOo = o + o + o + o + o + o + o + o + o + o + o;
        const int ___oooO = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___OooO = o + o + o + o + o + o + o + o + o;
        const int ___oooo = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___Oooo = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___oOoO = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___OOoO = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___oOoo = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int ___OOoo = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int __ooOO_ = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int __OoOO_ = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int __ooOo_ = o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int __oOOo_ = o + o + o + o + o + o + o + o + o + o + o + o + o + o;
        const int __________________________________________ = o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o + o;

    }

    class Program
    {

        static void Main(string[] args)
        {
            object[] list = { "fortran", "77", "oldskool" };
            
            new quicksort(list, delegate(object a, object b)
            {
                return a.ToString().CompareTo(b.ToString());
            });
        }
    }
}