Selection sort
|
Selection sort is a sort algorithm that works as follows:
- find the minimum value in the list
- swap it with the value in the first position
- sort the remainder of the list (excluding the first value)
If you had to invent a sort algorithm on your own, you'd probably write an algorithm similar to selection sort because it is probably the most intuitive and immediate to invent.
This algorithm, iterating through a list of n unsorted items, has a worst-case, average-case, and best-case run-time of Θ(n2), assuming that comparisons can be done in constant time. It is generally out performed by insertion sort.
Selection sort is not a stable sort.
Heapsort greatly improves the basic algorithm by using a heap data structure to speed up finding and removing the lowest datum.
Implementations of Selection Sort
Implementation in C:
for (i = 0; i < n-1; i++) { min = i; for (j = i+1; j < n; j++) { if (x[min] > x[j]) { min = j; } } temp = x[i]; x[i] = x[min]; x[min] = temp; }
Implementation in Basic:
For i = 1 To n - 1 min = i For j = i + 1 To n If x(min) > x(j) Then min = j End If Next j temp = x(i) x(i) = x(min) x(min) = temp Next i
Implementation in Java (iterative):
public static void selectionSort (int[] numbers) { int min, temp; for (int index = 0; index < numbers.length-1; index++) { min = index; for (int scan = index+1; scan < numbers.length; scan++) if (numbers[scan] < numbers[min]) min = scan; // Swap the values temp = numbers[min]; numbers[min] = numbers[index]; numbers[index] = temp; } }
Implementation in Java (recursive):
// Selection sort for an array of ints public static int findMin(int[] array, int index) { int min = index - 1; if(index < array.length - 1) min = findMin(array, index + 1); if(array[index] < array[min]) min = index; return min; } public static void selectionSort(int[] array) { for(int left = 0; left < array.length - 1; left++) { swap(array, left, findMin(array, left)); } } public static void swap(int[] array, int index1, int index2) {//swap the two values int temp = array[index1]; array[index1] = array[index2]; array[index2] = temp; }de:Selectionsort
fr:Tri par slection lt:Išrinkimo rūšiavimo algoritmas ja:選択ソート pl:Sortowanie przez wybieranie pt:Selection sort