I. Introduction
When given a list of elements in a random order, we want to rearrange them in ascending or descending order to perform useful operations. The sorting techniques can be divided into two categories, comparison based techniques and non-comparison based techniques. Comparison based sorting techniques include bubble sort, insertion sort, selection sort, merge sort, quick sort, etc. [1]. Non-comparison based sorting techniques include bucket sort, radix sort, etc. [2]. The current sorting techniques have certain disadvantages [3]. Sorting algorithms such as bubble sort, selection sort and insertion sort have quadratic time complexities for worst and average cases. Merge sort is faster, but it is not an in-place sort and hence requires a lot of memory. Quick sort has worst case time complexity of O(n2) for a poor pivot selection or when it tries to sort an already sorted list [4].