Selection Sort in Java

In computer science and programming, sorting is a fundamental operation. It’s critical to be able to organize elements in a precise order whether working with a list of names, a database of entries, or any other dataset. In this blog post, we’ll look at one of Java’s most basic sorting algorithms: Selection Sort. We’ll look at how it works, how to build it in Java, and how long it takes. You’ll have a firm grasp of this sorting strategy by the end of this post.

What is the Selection Sort?

Selection Sort is a simple and uncomplicated sorting algorithm. It takes the smallest member from an unsorted region of the array and sets it at the beginning of the array periodically. This method is repeated until the full array has been sorted.

Advantages & Disadvantages of Selection Sort in Java

Advantages of Selection Sort in Java 

1. Simplicity: Sort is one of the most straightforward sorting algorithms to comprehend and implement. It’s a wonderful choice for educational applications or for teaching beginners about sorting.

2. In-Place Sorting: Selection Sort sorts the array in-place, which eliminates the need for additional memory. When it comes to memory, this can be useful.

3. Stable Sort: Selection Using a stable sorting method, means that the relative order of equal elements in the sorted array is preserved. This is important in some applications, such as database sorting. 

4. Deterministic: Choosing Since sort is a deterministic algorithm, it always yields the same outcome for the same input dataset. In certain circumstances, this predictability may be advantageous. 

Disadvantages of Selection Sort in Java 

1. Inefficiency: Selection Sort is not the most efficient sorting algorithm. It has an average temporal complexity of O(n2), which indicates that its performance deteriorate significantly as the dataset size grows. It can be very sluggish with large datasets.

2. Absence of Adaptivity: The Selection Sort fails to adjust to the current elemental order. It never changes the amount of comparisons and swaps it does, no matter what the array’s starting state is. This inability to adapt can be a big problem in practical situations.

3. Performance with Large Datasets: When dealing with large datasets, Selection Sort becomes impractical due to its quadratic time complexity. There are more efficient sorting algorithms, like Quick Sort or Merge Sort, that are better suited for handling large datasets.

4. Restricted Use Cases: Choice Large or complicated datasets are rarely sorted using sort in practice. Although it is useful for teaching, its inefficiency makes it less appropriate for practical uses where performance is a crucial consideration.

5. Not Applicable to Almost Sorted Data: Selecting When the data is almost sorted or is already partially sorted, sort doesn’t work well. It performs less well because it doesn’t make use of the current order and still needs a comparable amount of comparisons and swaps.

Example Code of Selection Sort in Java

The provided code is a Java implementation of the Selection Sort algorithm:

// Selection Sort in Java
import java.io.*;
public class SelectionSortEx{
	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[])
	{
		SelectionSortEx ob = new SelectionSortEx();
		int array[] = {2,5,8,3,1,9,7,2};
		ob.sort(array);
		System.out.println("Sorted array");
		ob.printArray(array);
	}
}

Selection Sort is a simple comparison-based sorting algorithm that repeatedly selects the minimum element from an unsorted portion of the array and moves it to the beginning of the sorted portion. Let’s understand the code step by step:

1. The `SelectionSortEx` class is declared to contain the Selection Sort algorithm implementation. The `sort` method performs the sorting, and the `printArray` method prints the array.

2. In the `sort` method, the input array `arr` is passed as a parameter. `n` represents the length of the array, which is determined using the `length` property.

3. The outer loop, controlled by `i`, iterates through the array from the beginning to the second-to-last element. This loop defines the boundary of the sorted and unsorted subarrays.

4. Inside the outer loop, there’s an inner loop, controlled by `j`, which starts from `i + 1` and goes up to the end of the array (`n`). This loop finds the index of the minimum element in the unsorted portion.

5. The index of the minimum element is stored in `min_idx`.

6. The code then performs a swap operation to move the minimum element to the beginning of the sorted portion. It does this by swapping `arr[i]` and `arr[min_idx]`.

7. The outer loop continues, and after each iteration, the smallest remaining element is moved to the sorted portion.

8. The `printArray` method is used to display the sorted array elements.

9. Finally, in the `main` method, an instance of the `SelectionSortEx` class is created, and an example array is defined. The `sort` method is called to sort the array, and the sorted array is printed using the `printArray` method.

When you run this program, it will sort the array in ascending order using the Selection Sort algorithm and print the sorted result.

Learn more about the Bubble Sort in Java and Binary Search in Java now!

Output:

Sorted array
1 2 2 3 5 7 8 9

Time Complexity and Performance

The time complexity of Selection Sort in Java is O(n^2) in the worst-case and average-case scenarios, where ‘n’ represents the number of elements in the array. This makes it inefficient for sorting large datasets as the number of comparisons and swaps grows quadratically with the dataset size. While Selection Sort is straightforward to understand and implement, it’s not suitable for large-scale sorting operations, and more efficient algorithms should be considered for such scenarios.

Real-World Scenarios of Selection Sort in Java

Explore JavaScript’s for loop for dynamic web interactions.

We’ll check out a few real-world scenarios where Selection Sort can be efficient, despite its limitations:

1. Small Datasets: In cases where the dataset is very small, the overhead of more complex sorting algorithms might not be justified. Selection Sort is easy to understand and implement, making it a reasonable choice for sorting a handful of items.

2. Educational Purposes: Selection Sort is often used as a teaching tool to introduce the concept of sorting algorithms and algorithm analysis. It helps beginners grasp the fundamental idea of sorting and is a good starting point before diving into more complex algorithms.

3. Teaching Sorting Algorithms: If you’re teaching sorting algorithms, you might use Selection Sort as a first step before introducing more efficient sorting techniques. It helps students understand the basic principles of sorting.

4. Testing and Benchmarking: Selection Sort can serve as a reference point for testing and benchmarking other sorting algorithms. By comparing the performance of more efficient sorting algorithms with Selection Sort, you can gauge the improvement in efficiency.

5. Emergency Sorting: In certain situations where a quick and simple sorting algorithm is needed as a one-time operation, Selection Sort can be employed. This is rare but could happen when sorting is not a regular part of the program’s operation.

6. Partial Sort: In some cases, you might only need to find the smallest or largest elements in a dataset rather than sorting the entire dataset. Selection Sort could be adapted to find the minimum or maximum elements efficiently.

7. Preserving Relative Order: Selection Sort is a stable sorting algorithm, meaning it preserves the relative order of equal elements. This feature can be useful in situations where the relative order of equivalent elements needs to be maintained.

8. When Memory is Limited: In cases where memory usage is strictly limited, Selection Sort’s in-place sorting capability can be an advantage, as it doesn’t require additional memory for sorting.

In conclusion, Java’s Selection Sort sorting algorithm is a basic yet crucial one. Understanding this algorithm is really beneficial, particularly if you’re new to sorting. Although it might not be the most effective option for sizable datasets, it offers insightful information about sorting principles and algorithms. Programming requires the ability to sort, and Selection Sort is a great place to start.

We really hope you enjoyed reading and finding value in our blog post on “Selection Sort in Java.” Check visit our Newtum website for additional information on a variety of subjects, including as PHP, C Programming for kids, Java, and more. Happy coding!

About The Author

Leave a Reply