There are various types of sorting technique which offers different speeds for different types of initial data arrangements. I am not about to sit down here and type a length narrative explaining how each of them functions. Better yet, I will let the animated GIF do the talking.
The resources (like the animated gifs, codes, pseudocode, algorithm) in this webpage do not belong to me. The credit goes to all the hardworking developers and publishers which is listed my my Reference list below.
Bubble Sort
Example 1

Example 2

Key Notes
– Bubble sort takes Ο(n2)
Algorithm
Step 1 - Starts with very first two elements (i=0 and i+1), comparing them
to check which one is greater.
Step 2 - Swap the elements keeping smaller elements on the left-hand side
of the array
Step 3 - Add i++
Step 4 - Compare the next two elements (i and i+1) and swap the elements if
the left-hand side element is greater than the right-hand side.
Step 5 - Continue until end of the array
Step 6 - Repeat again from index 0 until list is sorted
Pseudocode
procedure bubbleSort( list : array of items )
loop = list.count;
for i = 0 to loop-1 do:
swapped = false
for j = 0 to loop-1 do:
/* compare the adjacent elements */
if list[j] > list[j+1] then
/* swap them */
swap( list[j], list[j+1] )
swapped = true
end if
end for
/*if no number was swapped that means
array is sorted now, break the loop.*/
if(not swapped) then
break
end if
end for
end procedure return list
Example Code in C#
public void BubbleSort(int[] intArray)
{
Console.WriteLine("==Unsorted Array Input==");
for (int i = 0; i < intArray.Length; i++) { Console.WriteLine(intArray[i]); } for (int i = intArray.Length - 1; i > 0; i--)
{
for (int j = 0; j <= i - 1; j++) { if (intArray[j] > intArray[j + 1])
{
int highValue = intArray[j];
intArray[j] = intArray[j + 1];
intArray[j + 1] = highValue;
}
}
}
Console.WriteLine("==Sorted Array Using Bubble Sort==");
for (int i = 0; i < intArray.Length; i++)
{
Console.WriteLine(intArray[i]);
}
}
Output
==Unsorted Array Input== 100 15 11 12 10 -1 0 ==Sorted Array Using Bubble Sort== -1 0 10 11 12 15 100
Insertion Sort
Key Notes
– Average and worst case complexities are of Ο(n2), where n is the number of items
– Uses nested looping
Example 1

Example 2

Algorithm
Step 1 - If it is the first element, it is already sorted. return 1;
Step 2 - Pick next element
Step 3 - Compare with all elements in the sorted sub-list
Step 4 - Shift all the elements in the sorted sub-list that is greater than the
value to be sorted
Step 5 - Insert the value
Step 6 - Repeat until list is sorted
Pseudocode
procedure insertionSort( A : array of items )
int holePosition
int valueToInsert
for i = 1 to length(A) inclusive do:
/* select value to be inserted */
valueToInsert = A[i]
holePosition = i
/*locate hole position for the element to be inserted */
while holePosition > 0 and A[holePosition-1] > valueToInsert do:
A[holePosition] = A[holePosition-1]
holePosition = holePosition -1
end while
/* insert the number at hole position */
A[holePosition] = valueToInsert
end for
end procedure
Example Code in C#
public void InsertionSort(int[] intArray)
{
Console.WriteLine("==Integer Array Input==");
for (int i = 0; i < intArray.Length; i++)
{
Console.WriteLine(intArray[i]);
}
int temp, j;
for (int i = 1; i < intArray.Length; i++) { temp = intArray[i]; j = i - 1; while (j >= 0 && intArray[j] > temp)
{
intArray[j + 1] = intArray[j];
j--;
}
intArray[j + 1] = temp;
}
Console.WriteLine("==Integer Array Output==");
for (int i = 0; i < intArray.Length; i++)
{
Console.WriteLine(intArray[i]);
}
}
Output
==Integer Array Input== 5 6 4 3 2 1 ==Integer Array Output== 1 2 3 4 5 6
Selection Sort
Key Notes
– Keeps track of “sorted” and “unsorted” index
– Looks for lowest from the “unsorted” side of array
– Swaps position with first value in the “unsorted” side
– “Sorted” side numbers are never revisited (assume it has been sorted)
– Swapping is done on the “unsorted” side only.
– Average and worst case complexities are of Ο(n2), where n is the number of items
– Inefficient sorting algorithm for large amounts of data, it is prefered for very small amounts of data
Example 1

Example 2

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
Pseudocode
procedure selection sort
list : array of items
n : size of list
for i = 1 to n - 1
/* set current element as minimum*/
min = i
/* check the element to be minimum */
for j = i+1 to n
if list[j] < list[min] then
min = j;
end if
end for
/* swap the minimum element with the current element*/
if indexMin != i then
swap list[min] and list[i]
end if
end for
end procedure
Example Code in C#
public void selectSort(int [] arr)
{
Console.WriteLine("==Integer Array Input==");
for (int i = 0; i < intArray.Length; i++)
{
Console.WriteLine(intArray[i]);
}
// pos_min is short for position of min
int pos_min,temp;
for (int i=0; i < arr.Length-1; i++)
{
pos_min = i;//set pos_min to the current index of array
for (int j=i+1; j < arr.Length; j++)
{
if (arr[j] < arr[pos_min])
{
// pos_min will keep track of the index that min is in, this is needed when a swap happens
pos_min = j;
}
}
// if pos_min no longer equals i than a smaller value must have been found, so a swap must occur
if (pos_min != i)
{
temp = arr[i];
arr[i] = arr[pos_min];
arr[pos_min] = temp;
}
}
Console.WriteLine("==Integer Array Output==");
for (int i = 0; i < intArray.Length; i++)
{
Console.WriteLine(intArray[i]);
}
}
Output
==Integer Array Input== 5 6 4 3 2 1 ==Integer Array Output== 1 2 3 4 5 6
Merge Sort
Key Notes
– Worst-case time complexity being O(n log n)
Example 1

Algorithm
Step 1 - if it is only one element in the list it is already sorted, return.
Step 2 - divide the list recursively into two halves until it can no more
be divided.
Step 3 - merge the smaller lists into new list in sorted order.
Pseudocode
procedure mergesort( var a as array )
if ( n == 1 ) return a
var l1 as array = a[0] ... a[n/2]
var l2 as array = a[n/2+1] ... a[n]
l1 = mergesort( l1 )
l2 = mergesort( l2 )
return merge( l1, l2 )
end procedure
procedure merge( var a as array, var b as array )
var c as array
while ( a and b have elements )
if ( a[0] > b[0] )
add b[0] to the end of c
remove b[0] from b
else
add a[0] to the end of c
remove a[0] from a
end if
end while
while ( a has elements )
add a[0] to the end of c
remove a[0] from a
end while
while ( b has elements )
add b[0] to the end of c
remove b[0] from b
end while
return c
end procedure
Example Code in C#
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharpSort
{
class Program
{
static public void DoMerge(int [] numbers, int left, int mid, int right)
{
int [] temp = new int[25];
int i, left_end, num_elements, tmp_pos;
left_end = (mid - 1);
tmp_pos = left;
num_elements = (right - left + 1);
while ((left <= left_end) && (mid <= right))
{
if (numbers[left] <= numbers[mid])
temp[tmp_pos++] = numbers[left++];
else
temp[tmp_pos++] = numbers[mid++];
}
while (left <= left_end)
temp[tmp_pos++] = numbers[left++];
while (mid <= right)
temp[tmp_pos++] = numbers[mid++];
for (i = 0; i < num_elements; i++) { numbers[right] = temp[right]; right--; } } static public void MergeSort_Recursive(int [] numbers, int left, int right) { int mid; if (right > left)
{
mid = (right + left) / 2;
MergeSort_Recursive(numbers, left, mid);
MergeSort_Recursive(numbers, (mid + 1), right);
DoMerge(numbers, left, (mid+1), right);
}
}
static void Main(string[] args)
{
int[] numbers = { 3, 8, 7, 5, 2, 1, 9, 6, 4 };
int len = 9;
Console.WriteLine("MergeSort By Recursive Method");
MergeSort_Recursive(numbers, 0, len - 1);
for (int i = 0; i < 9; i++)
Console.WriteLine(numbers[i]);
Console.WriteLine(numbers[i]);
}
}
}
Output
MergeSort By Recursive Method 1 2 3 4 5 6 7 8 9 Press any key to continue . . .
Heap Sort
Example 1

Example 2

Algorithm
Note that A is an array Step 1 BUILD-HEAP(A) Step 2 for i = length[A], i >= 0, decrement i Step 3 do exchange A[1] A[i] Step 4 heap-size[A] heap-size[A] -1 Step 5 HEAPIFY(A, 1)
Pseudocode
l <- LEFT(i) r <- RIGHT(i) largest = i if l <= heap-size[A] and A[l] > A[i] then largest <- l else largest <- i if r <= heap-size[A] and A[r] > A[largest] then largest <- r if largest != i then SWAP A[i] <- A[largest] HEAPIFY(A,largest)
Example Code in C#
class Program
{
static void Main(string[] args)
{
int[] arr = { 10, 64, 7, 52, 32, 18, 2, 48};
HeapSort hs = new HeapSort();
hs.PerformHeapSort(arr);
Console.ReadLine();
}
}
class HeapSort
{
private int heapSize;
private void BuildHeap(int[] arr)
{
heapSize = arr.Length-1;
for (int i = heapSize/2; i >= 0; i--)
{
Heapify(arr, i);
}
}
private void Swap(int[] arr, int x, int y)//function to swap elements
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
private void Heapify(int[] arr, int index)
{
int left = 2 * index;
int right = 2 * index + 1;
int largest = index;
if (left <= heapSize && arr[left] > arr[index])
{
largest = left;
}
if (right <= heapSize && arr[right] > arr[largest])
{
largest = right;
}
if (largest != index)
{
Swap(arr, index, largest);
Heapify(arr, largest);
}
}
public void PerformHeapSort(int[] arr)
{
BuildHeap(arr);
for (int i = arr.Length-1; i >= 0; i--)
{
Swap(arr, 0, i);
heapSize--;
Heapify(arr, 0);
}
DisplayArray(arr);
}
private void DisplayArray(int[] arr)
{
for (int i = 0; i < arr.Length; i++)
{ Console.Write("[{0}]", arr[i]); }
}
}
Quick Sort
Key Notes
– Average and worst case complexity are of O(nlogn), where n is the number of items
Example 1

Example 2

Example 2

Algorithm
Step 1 - Choose the highest index value has 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
Pseudocode
function partitionFunc(left, right, pivot)
leftPointer = left -1
rightPointer = right
while True do
while A[++leftPointer] < pivot do //do-nothing end while while rightPointer > 0 && A[--rightPointer] > pivot do
//do-nothing
end while
if leftPointer >= rightPointer
break
else
swap leftPointer,rightPointer
end if
end while
swap leftPointer,right
return leftPointer
end function
Example Code in C#
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharpSort
{
class Program
{
static public int Partition(int [] numbers, int left, int right)
{
int pivot = numbers[left];
while (true)
{
while (numbers[left] < pivot) left++; while (numbers[right] > pivot)
right--;
if (left < right)
{
int temp = numbers[right];
numbers[right] = numbers[left];
numbers[left] = temp;
}
else
{
return right;
}
}
}
static public void QuickSort_Recursive(int [] arr, int left, int right)
{
// For Recusrion
if(left < right) { int pivot = Partition(arr, left, right); if(pivot > 1)
QuickSort_Recursive(arr, left, pivot - 1);
if(pivot + 1 < right)
QuickSort_Recursive(arr, pivot + 1, right);
}
}
static void Main(string[] args)
{
int[] numbers = { 3, 8, 7, 5, 2, 1, 9, 6, 4 };
int len = 9;
Console.WriteLine("QuickSort By Recursive Method");
QuickSort_Recursive(numbers, 0, len - 1);
for (int i = 0; i < 9; i++)
Console.WriteLine(numbers[i]);
Console.WriteLine();
}
}
}
Output
QuickSort By Recursive Method 1 2 3 4 5 6 7 8 9 Press any key to continue . . .
Which Algorithm Is For Me?
It depends heavily on details of the application and implementation. The table below summarizes the important characteristics of the sort algorithms.
| Growth Rate to Srot N Items | ||||||||||
| Alorithm | Stability | Inplace | Running Time | Extra Space | Note | |||||
| Insertion | Yes | Yes | Between n and n2 | 1 | Depends on the order of the input key | |||||
| Selection | No | Yes | n2 | 1 | ||||||
| Bubble | Yes | Yes | n2 | 1 | ||||||
| Merge | Yes | No | nlogn | n | ||||||
| Heap | No | Yes | nlogn | n | ||||||
| Quick | No | Yes | nlogn | logn | Probabilistic | |||||

Sorting speed based on data arrangement types.

Reference
The animated GIF shown here are by no means any of my material. I got them from the website below.
|