Sorting Alorithms
Sorting Alorithms
Sorting Alorithms
Sorting
Sorting
• Sorting is a process that organizes a collection of
data into either ascending or descending order.
• An internal sort (in-place) requires that the
collection of data fit entirely in the computer’s
main memory.
• We can use an external sort (auxiliary space)
when the collection of data cannot fit in the
computer’s main memory all at once but must
reside in secondary storage such as on a disk.
• We will analyze only internal sorting algorithms.
Sorting
• Any significant amount of computer output is
generally arranged in some sorted order so that it
can be interpreted.
• Sorting also has indirect uses. An initial sort of the
data can significantly enhance the performance of
an algorithm.
• Majority of programming projects use a sort
somewhere, and in many cases, the sorting cost
determines the running time.
Sorting
• A comparison-based sorting algorithm makes
ordering decisions only on the basis of
comparisons.
• Stability of sorting Algorithm - A sorting algorithm
is said to be stable if two objects with equal keys
appear in the same order in sorted output as they
appear in the input array to be sorted.
Sorting Algorithms
•There are many sorting algorithms,
such as:
– Selection Sort
– Insertion Sort
– Bubble Sort
– Merge Sort
– Quick Sort
23 78 45 8 32 56 Original List
8 78 45 23 32 56 After pass 1
8 23 45 78 32 56 After pass 2
After pass 3
8 23 32 78 45 56
8 23 32 45 78 56 After pass 4
After pass 5
8 23 32 45 56 78
Selection Sort Algorithm
• Step 1 − Set MIN to location 0
• Step 2 − Search the minimum element in the
list
• Step 3 − Swap with value at location MIN
• Step 4 − Increment MIN to point to next
element
• Step 5 − Repeat until list is sorted
Selection Sort
SelectionSort ( A, n){
for (i 1 to n – 1) {
imin i
for(j i+1 to n-1 )
{
if(A[j]<A[imin]
imin j
swap(A[i], A[imin]);
}
temp A[i]
A[i] A[imin]
A[imin] temp
}
}
Selection Sort -- Analysis
• In general, we compare keys and move items (or
exchange items) in a sorting algorithm (which uses
key comparisons).
So, to analyze a sorting algorithm we should
count the number of key comparisons and the
number of moves.
– Ignoring other operations does not affect our
final result.
• In selectionSort function, the outer for loop
executes n-1 times.
• We invoke swap function once at each iteration.
Total Swaps: n-1
Total Moves: 3*(n-1) (Each swap has three moves)
Selection Sort – Analysis (cont.)
• The inner for loop executes the size of the unsorted part
minus 1 (from 1 to n-1), and in each iteration we make
one key comparison.
# of key comparisons = 1+2+...+n-1 = n*(n-1)/2
So, Selection sort is O(n2)
• The best case, the worst case, and the average case of the
selection sort algorithm are same. all of them are
O(n2)
– This means that the behavior of the selection sort algorithm does not
depend on the initial organization of data.
– Since O(n2) grows so rapidly, the selection sort algorithm is appropriate only
for small n.
– Although the selection sort algorithm requires O(n2) key comparisons, it
only requires O(n) moves.
– A selection sort could be a good choice if data moves are costly but key
comparisons are not costly (short keys, long records).
Comparison of N, logN and N2
N O(LogN) O(N2)
16 4 256
64 6 4K
256 8 64K
1,024 10 1M
16,384 14 256M
131,072 17 16G
262,144 18 6.87E+10
524,288 19 2.74E+11
1,048,576 20 1.09E+12
1,073,741,824 30 1.15E+18
Insertion Sort
• Insertion sort is slower than quick sort, but not
as slow as bubble sort, and it is easy to
understand.
• Insertion sort works the same way as arranging
your hand when playing cards.
– Out of the pile of unsorted cards that were dealt to
you, you pick up a card and place it in your hand in
the correct position relative to the cards you’re
already holding.
Insertion Sort
• Insertion sort is a simple sorting algorithm
that is appropriate for small inputs.
23 78 45 8 32 56 Original List
23 78 45 8 32 56 After pass 1
23 45 78 8 32 56 After pass 2
After pass 3
8 23 45 78 32 56
8 23 32 45 78 56 After pass 4
After pass 5
8 23 32 45 56 78
Insertion Sort Algorithm
Insertion Sort Pseudocode
InsertionSort ( A, n){
for (i 1 to n – 1) {
value A[i]
hole i
while ( hole > 0 && A[hole-1] < value )
{
A[hole] A[hole-1]
holehole-1
}
A[hole] value
}
}
Insertion Sort Algorithm
template <class Item>
void insertionSort(Item a[], int n)
{
for (int i = 1; i < n; i++)
{
Item tmp = a[i];
23 45 8 32 78 56
Compare 4th and 5th
(swap)
• Arranging the array elements around the pivot p generates two smaller sorting
problems.
– sort the left section of the array, and sort the right section of the array.
– when these two smaller sorting problems are solved recursively, our bigger
sorting problem is solved.
Partition – Choosing the pivot
• First, we have to select a pivot element among the elements of the
given array, and we put this pivot into the first location of the array
before partitioning.
• Which array item should be selected as pivot?
– Somehow we have to select a pivot, and we hope that we will
get a good partitioning.
– If the items in the array arranged randomly, we choose a pivot
randomly.
– We can choose the first or last element as a pivot (it may not
give a good partitioning).
– We can use different techniques to select the pivot.
Partition Function (cont.)
Partition Function
Partition (A, start, end)
{
pivot A[end]
pindex start
for i start to end – 1
{
if (A[i] pivot)
{
swap( A[i], A[pindex])
pindex pindex + 1
}
}
}
Quick Sort Algorithm
• Step 1 − Choose the highest index value as pivot
• Step 2 − Take two variables to point left and right of the list
excluding pivot
• Step 3 − left points to the low index
• Step 4 − right points to the high
• Step 5 − while value at left is less than pivot move right
• Step 6 − while value at right is greater than pivot move left
• Step 7 − if both step 5 and step 6 does not match swap left and
right
• Step 8 − if left ≥ right, the point where they met is new pivot
Quicksort Function
Quicksort – Analysis
Worst Case: (assume that we are selecting the first element as pivot)
– The pivot divides the list of size n into two sublists of sizes 0 and n-1.
– The number of key comparisons
= n-1 + n-2 + ... + 1
= n2/2 – n/2 O(n2)
– The number of swaps =
= n-1 + n-1 + n-2 + ... + 1
swaps outside of the for loop swaps inside of the for loop
• Quicksort is slow when the array is sorted and we choose the first
element as the pivot.
• Although the worst case behavior is not so good, its average case
behavior is much better than its worst case.