Sorting Algorithms- 1 | Algorithms - Computer Science Engineering (CSE) PDF Download

Selection Sort

The selection sort algorithm sorts an array by repeatedly finding the minimum element (considering ascending order) from unsorted part and putting it at the beginning. The algorithm maintains two subarrays in a given array.

  1. The subarray which is already sorted.
  2. Remaining subarray which is unsorted.

In every iteration of selection sort, the minimum element (considering ascending order) from the unsorted subarray is picked and moved to the sorted subarray.
Following example explains the above steps:
arr[] = 64 25 12 22 11
// Find the minimum element in arr[0...4]
// and place it at beginning
11 25 12 22 64
// Find the minimum element in arr[1...4]
// and place it at beginning of arr[1...4]
11 12 25 22 64
// Find the minimum element in arr[2...4]
// and place it at beginning of arr[2...4]
11 12 22 25 64
// Find the minimum element in arr[3...4]
// and place it at beginning of arr[3...4]
11 12 22 25 64

Flowchart of the Selection Sort:Sorting Algorithms- 1 | Algorithms - Computer Science Engineering (CSE)

  • C++
    // C++ program for implementation of selection sort
    #include <bits/stdc++.h>
    using namespace std;
    void swap(int *xp, int *yp)
    {
        int temp = *xp;
        *xp = *yp;
        *yp = temp;
    }
    void selectionSort(int arr[], int n)
    {
        int i, j, min_idx;
        // One by one move boundary of unsorted subarray
        for (i = 0; i < n-1; i++)
        {
            // Find the minimum element in unsorted array
            min_idx = i;
            for (j = i+1; j < n; j++)
            if (arr[j] < arr[min_idx])
                min_idx = j;
            // Swap the found minimum element with the first element
            swap(&arr[min_idx], &arr[i]);
        }
    }
    /* Function to print an array */
    void printArray(int arr[], int size)
    {
        int i;
        for (i=0; i < size; i++)
            cout << arr[i] << " ";
        cout << endl;
    }
    // Driver program to test above functions
    int main()
    {
        int arr[] = {64, 25, 12, 22, 11};
        int n = sizeof(arr)/sizeof(arr[0]);
        selectionSort(arr, n);
        cout << "Sorted array: \n";
        printArray(arr, n);
        return 0;
    }
    // This is code is contributed by rathbhupendra
  • C
    // C program for implementation of selection sort
    #include <stdio.h>
    void swap(int *xp, int *yp)
    {
        int temp = *xp;
        *xp = *yp;
        *yp = temp;
    }
    void selectionSort(int arr[], int n)
    {
        int i, j, min_idx;
        // One by one move boundary of unsorted subarray
        for (i = 0; i < n-1; i++)
    {
            // Find the minimum element in unsorted array
            min_idx = i;
            for (j = i+1; j < n; j++)
              if (arr[j] < arr[min_idx])
                min_idx = j;
            // Swap the found minimum element with the first element
            swap(&arr[min_idx], &arr[i]);
        }
    }
    /* Function to print an array */
    void printArray(int arr[], int size)
    {
        int i;
        for (i=0; i < size; i++)
            printf("%d ", arr[i]);
        printf("\n");
    }
    // Driver program to test above functions
    int main()
    {
        int arr[] = {64, 25, 12, 22, 11};
        int n = sizeof(arr)/sizeof(arr[0]);
        selectionSort(arr, n);
        printf("Sorted array: \n");
        printArray(arr, n);
        return 0;
    }
  • Python
    # Python program for implementation of Selection
    # Sort
    import sys
    A = [64, 25, 12, 22, 11]
    # Traverse through all array elements
    for i in range(len(A)):
        # Find the minimum element in remaining
        # unsorted array
        min_idx = i
        for j in range(i+1, len(A)):
            if A[min_idx] > A[j]:
                min_idx = j
        # Swap the found minimum element with
        # the first element
        A[i], A[min_idx] = A[min_idx], A[i]
    # Driver code to test above
    print ("Sorted array")
    for i in range(len(A)):
        print("%d" %A[i]),
  • Java
    // Java program for implementation of Selection Sort
    class SelectionSort
    {
        void sort(int arr[])
        {
            int n = arr.length;
            // One by one move boundary of unsorted subarray
            for (int i = 0; i < n-1; i++)
            {
                // Find the minimum element in unsorted array
                int min_idx = i;
                for (int j = i+1; j < n; j++)
                    if (arr[j] < arr[min_idx])
                        min_idx = j;
                // Swap the found minimum element with the first
                // element
                int temp = arr[min_idx];
                arr[min_idx] = arr[i];
                arr[i] = temp;
            }
        }
        // Prints the array
        void printArray(int arr[])
        {
            int n = arr.length;
            for (int i=0; i<n; ++i)
                System.out.print(arr[i]+" ");
            System.out.println();
        }
          // Driver code to test above
        public static void main(String args[])
        {
            SelectionSort ob = new SelectionSort();
            int arr[] = {64,25,12,22,11};
            ob.sort(arr);
            System.out.println("Sorted array");
            ob.printArray(arr);
        }
    }
    /* This code is contributed by Rajat Mishra*/
  • C#
    // C# program for implementation
    // of Selection Sort
    using System;
    class GFG
    {
        static void sort(int []arr)
        {
            int n = arr.Length;
            // One by one move boundary of unsorted subarray
            for (int i = 0; i < n - 1; i++)
            {
                // Find the minimum element in unsorted array
                int min_idx = i;
                for (int j = i + 1; j < n; j++)
                    if (arr[j] < arr[min_idx])
                        min_idx = j;
                // Swap the found minimum element with the first
                // element
                int temp = arr[min_idx];
                arr[min_idx] = arr[i];
                arr[i] = temp;
            }
        }
        // Prints the array
        static void printArray(int []arr)
        {
            int n = arr.Length;
            for (int i=0; i<n; ++i)
                Console.Write(arr[i]+" ");
            Console.WriteLine();
        }
        // Driver code
        public static void Main()
        {
            int []arr = {64,25,12,22,11};
            sort(arr);
            Console.WriteLine("Sorted array");
            printArray(arr);
        }
    }
    // This code is contributed by Sam007
  • PHP
    <?php
    // PHP program for implementation
    // of selection sort
    function selection_sort(&$arr, $n)
    {
        for($i = 0; $i < $n ; $i++)
        {
            $low = $i;
            for($j = $i + 1; $j < $n ; $j++)
            {
                if ($arr[$j] < $arr[$low])
                {
                    $low = $j;
                }
            }
            // swap the minimum value to $ith node
            if ($arr[$i] > $arr[$low]
            {
                $tmp = $arr[$i];
                $arr[$i] = $arr[$low];
                $arr[$low] = $tmp;
            }
        }
    }
    // Driver Code
    $arr = array(64, 25, 12, 22, 11);
    $len = count($arr);
    selection_sort($arr, $len);
    echo "Sorted array : \n";
    for ($i = 0; $i < $len; $i++)
        echo $arr[$i] . " ";
    // This code is contributed
    // by Deepika Gupta.
    ?>

Output:
Sorted array:
11 12 22 25 64
Time Complexity: O(n2) as there are two nested loops.
Auxiliary Space: O(1)
The good thing about selection sort is it never makes more than O(n) swaps and can be useful when memory write is a costly operation.
Stability: The default implementation is not stable. However it can be made stable. Please see stable selection sort for details.
In Place: Yes, it does not require extra space.

Snapshots:
Sorting Algorithms- 1 | Algorithms - Computer Science Engineering (CSE)Sorting Algorithms- 1 | Algorithms - Computer Science Engineering (CSE)Sorting Algorithms- 1 | Algorithms - Computer Science Engineering (CSE)

Quiz on Selection Sort

Other Sorting Algorithms on GeeksforGeeks/GeeksQuiz:

  • Bubble Sort
  • Insertion Sort
  • Merge Sort
  • Heap Sort
  • QuickSort
  • Radix Sort
  • Counting Sort
  • Bucket Sort
  • ShellSort
The document Sorting Algorithms- 1 | Algorithms - Computer Science Engineering (CSE) is a part of the Computer Science Engineering (CSE) Course Algorithms.
All you need of Computer Science Engineering (CSE) at this link: Computer Science Engineering (CSE)
81 videos|80 docs|33 tests

Top Courses for Computer Science Engineering (CSE)

FAQs on Sorting Algorithms- 1 - Algorithms - Computer Science Engineering (CSE)

1. What is selection sort and how does it work?
Ans. Selection sort is a simple comparison-based sorting algorithm. It works by dividing the input array into two parts: the sorted part at the left end and the unsorted part at the right end. In each iteration, the algorithm finds the minimum element from the unsorted part and swaps it with the first element of the unsorted part, expanding the sorted part by one element.
2. What is the time complexity of selection sort?
Ans. The time complexity of selection sort is O(n^2), where n is the number of elements in the array. This is because the algorithm requires two nested loops to iterate through the array and perform comparisons and swaps.
3. Is selection sort stable?
Ans. No, selection sort is not stable. A stable sorting algorithm maintains the relative order of elements with equal keys. However, in selection sort, the swapping of elements can change the relative order of equal keys. Therefore, it is not considered a stable sorting algorithm.
4. When is selection sort a good choice for sorting?
Ans. Selection sort is a good choice for sorting when the number of elements to be sorted is small or when the memory usage needs to be minimized. It performs well for small input sizes due to its simplicity and ease of implementation. However, for large input sizes, more efficient sorting algorithms like merge sort or quicksort are preferred.
5. Can selection sort be used for sorting in descending order?
Ans. Yes, selection sort can be easily modified to sort in descending order. Instead of finding the minimum element in each iteration, the algorithm can be modified to find the maximum element and swap it with the first element of the unsorted part. This way, the largest element will be placed at the right end of the sorted part, resulting in a descending order sorting.
81 videos|80 docs|33 tests
Download as PDF
Explore Courses for Computer Science Engineering (CSE) exam

Top Courses for Computer Science Engineering (CSE)

Signup for Free!
Signup to see your scores go up within 7 days! Learn & Practice with 1000+ FREE Notes, Videos & Tests.
10M+ students study on EduRev
Related Searches

Sample Paper

,

Semester Notes

,

Extra Questions

,

study material

,

pdf

,

Objective type Questions

,

Important questions

,

Sorting Algorithms- 1 | Algorithms - Computer Science Engineering (CSE)

,

Exam

,

mock tests for examination

,

practice quizzes

,

Sorting Algorithms- 1 | Algorithms - Computer Science Engineering (CSE)

,

past year papers

,

Summary

,

MCQs

,

Free

,

Previous Year Questions with Solutions

,

Viva Questions

,

Sorting Algorithms- 1 | Algorithms - Computer Science Engineering (CSE)

,

ppt

,

video lectures

,

shortcuts and tricks

;