Selection Sort
Selection sort, dizinin ilk elemanı en küçük olarak kabul edilir, sonra dizi içerisindeki en küçük eleman aranır, bulunduğu zaman ilk eleman ile yer değiştirilir; daha sonra kalan elemanlar arasında ikinci en küçük eleman aranır ve ikinci elemanla yer değiştirilir. Bu işlem dizinin son elemanına kadar tekrar edildiğinde dizi küçükten, büyüğe doğru sıralanmış olur.
Not: Selection sort kararsız bir sıralama yani sıralama sırasında listede iki benzer öğelerin oluşumunu değiştirebilir.Ancak, bağlı liste veri yapılarını kullanarak gerçekleştirildiğinde istikrarlı bir sıralama da oluşturabilir.
Özellikleri
Zaman Karmaşıklığı O(n^2) çünkü iki tane iç içe döngü vardır.
İstikrarlı değil
O(1) extra alan
O(n) swaps
Uyarlanabilir değil,
Çalışma Şekli
Akış Diagramı
C Kodu
#include <stdio.h>
#define A_SIZE 10
void selection_sort(int *p, int size);
void print_array(int *p, int size);
int main(void)
{
int a[A_SIZE] = {45, 4, 12, 56, 87, -6, 0, 587, -56, 4};
print_array(a, A_SIZE);
selection_sort(a, A_SIZE);
print_array(a, A_SIZE);
return 0;
}
/**************************************/
void selection_sort(int *p, int size)
{
int i, j, temp, min;
for (i = 0; i < size - 1; i++) {
min = i;
for (j = i + 1; j < size; j++)
if (p[min] > p[j])
min = j;
temp = p[min];
p[min] = p[i];
p[i] = temp;
}
}
/**************************************/
void print_array(int *p, int size)
{
int i;
for (i = 0; i < size; i++)
printf("%d ", p[i]);
putchar('\n');
}
//Ekran Çıktısı
// 45 4 12 56 87 -6 0 587 -56 4
//-56 -6 0 4 4 12 45 56 87 587
Java Kodu
// 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);
}
}
//Ekran Çıktısı
//Sorted array:
//11 12 22 25 64