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());
});
}
}
}