One of the basic problems of computer science is sorting a list of items. It refers to the arranging of numerical or alphabetical or character data in statistical order (either in increasing order or decreasing order) or in lexicographical order (alphabetical value like addressee key) [1-3]. There are a number of solutions to this problem, known as sorting algorithms. There are several elementary and advanced sorting algorithms. Some sorting algorithms are simple and spontaneous, such as the bubble sort. Others, such as the quick sort are enormously complex, but produce super-fast results. Some sorting algorithm work on less number of elements, some are suitable for floating point numbers, some are good for specific range, some sorting algorithms are used for huge number of data, and some are used if the list has repeated values. Other factors to be considered in choosing a sorting algorithm include the programming effort, the number of words of main memory available, the size of disk or tape units and the extent to which the list is already ordered [4]. That means all sorting Algorithms are problem specific, meaning they work well on some specific problem and do not work well for all the problems. However, there is a direct correlation between the complexity of an algorithm and its relative effectiveness [5]. Many different sorting algorithms have been developed and improved to make sorting fast.
The classical bubble sort, selection sort, and insertion sort are very simple algorithms, often included in the text books to introduce algorithms and sorting, having runtime complexity of Ο(n2) making them impractical to use. The selection sort has a slight better running time than the simplest bubble sort algorithm and worse than the insertion sort. Ityields around 60% performance improvement over the bubble sort, but the insertion sort is over twice as fast as the bubble sort and is just as easy to implement as the selection sort [6]. Though other better techniques such as divide and conquer [7] exist, still there are scopes for fine-tuning these algorithms. Philosophy of these simple algorithms most closely matches human intuition [8]. They can be classified as an in-place [9] and a comparison sort [10].
In the classical selection sort algorithm to sort a list with n data elements n-1 passes are carried out. Each pass finds out the largest or the smallest data item. To do this the entire list is checked form the beginning until the portion of the list, which was sorted in the earlier passes. But, instead of looking from the start of the list in each pass, some information regarding the locations of the local maximum or minimum gathered and stored in the earlier iterations can be used to omit some useless search operations and the overall runtime can be reduced. The enhanced selection sort algorithm is based on this idea. The bubble sort also places the largest element in the proper location in each pass. As the bubble sort and selection sort are closely analogous, the enhancement of the bubble sort is done with the same method. In the classical insertion sort a sorted portion is maintained and in each pass of the algorithm a data item from the unsorted portion is inserted into the sorted portion from a certain side such that with the additional item it remains sorted. Considering just one side to insert leads many shift operations, which can be reduced if both sides of the sorted list is considered to insert a data item. The enhanced insertion sort incorporates this strategy.
This paper is organized in the following order. In Section 2 some previous works relating to improvement of these sorting algorithms are discussed briefly. Section 3 introduces the classical versions of each algorithm followed by detailed discussion and analysis of the proposed enhanced algorithms. Section 5 summarizes and concludes this paper after discussion of the results in Section 4 that shows superiority of the new algorithms.