Loop Invariant Condition with Examples of Sorting Algorithms


Loop Invariant Condition:
Loop invariant condition is a condition about the relationship between the variables of our program which is definitely true immediately before and immediately after each iteration of the loop.
For example: Consider an array A{7, 5, 3, 10, 2, 6} with 6 elements and we have to find maximum element max in the array.

max = -INF (minus infinite)
for (i = 0 to n-1)
  if (A[i] > max)
      max = A[i]

In the above example after 3rd iteration of the loop max value is 7, which holds true for first 3 elements of array A. Here, the loop invariant condition is that max is always maximum among the first i elements of array A.

Loop Invariant condition of various algorithms:
Prerequisite: insertion sort, selection sort, quick sort, bubblesort,

Selection Sort:
In selection sort algorithm we find the minimum element from the unsorted part and put it at the beginning.

min_idx = 0
for (i = 0; i < n-1; i++)
   min_idx = i;
   for (j = i+1 to n-1)
      if (arr[j] < arr[min_idx])
         min_idx = j;

    swap(&arr[min_idx], &arr[i]);

In the above pseudo code there are two loop invariant condition:
1. In the outer loop, array is sorted for first i elements.
2. In the inner loop, min is always the minimum value in A[i to j].

Insertion Sort:
In insertion sort, loop invariant condition is that the subarray A[0 to i-1] is always sorted.

for (i = 1 to n-1)
   key = arr[i];
   j = i-1;
   while (j >= 0 and arr[j] > key)
      arr[j+1] = arr[j];
      j = j-1;
   arr[j+1] = key;

In quicksort algorithm, after every partition call array is divided into 3 regions:
1. Pivot element is placed at its correct position.
2. Elements less than pivot element lie on the left side of pivot element.
3. Elements greater than pivot element lie on the right side of pivot element.

quickSort(arr[], low, high)
    if (low < high)
        pi = partition(arr, low, high);
        quickSort(arr, low, pi - 1);  // Before pi
        quickSort(arr, pi + 1, high); // After pi

partition (arr[], low, high)
    pivot = arr[high];   
    i = (low - 1) 
    for (j = low; j <= high- 1; j++)
        if (arr[j] <= pivot)
            swap arr[i] and arr[j]
    swap arr[i + 1] and arr[high])
    return (i + 1)

Bubble Sort:
In bubble sort algorithm, after each iteration of the loop largest element of the array is always placed at right most position. Therefore, the loop invariant condition is that at the end of i iteration right most i elements are sorted and in place.

for (i = 0 to n-1)         
  for (j = 0 to j  arr[j+1])
       swap(&arr[j], &arr[j+1]);

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.

Recommended Posts:

1.5 Average Difficulty : 1.5/5.0
Based on 2 vote(s)