 Sorting algorithms are prevalent in introductory computer science classes, where the abundance of algorithms for the problem provides a gentle introduction to a variety of core algorithm concepts, such as big O notation, divide and conquer algorithms, data structures such as heaps and binary trees, randomized algorithms, best, worst and average case analysis, time–space tradeoffs, and upper and lower bounds.Sorting a small arrays optimally (in least amount of comparisons and swaps) or fast (i.e.taking into account machine specific details) is still an open research problem, with solutions only known for very small arrays (<20 elements).