Таңдау арқылы сұрыптау
Сұрыптау алгоритмдерінің ең қарапайымдарының бірі – “таңдау арқылы сұрыптау”. Бұл алгоритмнің қалай жұмыс істейтінін төменде көрсетейік.
Айталық сізге бір массив берілді. Бұл массив элементтерін «таңдау» арқылы, төменнен жоғары қарай былай сұрыптаймыз. Алдымен, массивтегі ең кішкентай элементті тауып (таңдап) алып, оны ең бірінші элементпен алмастырамыз. (Егер ең бірінші элемент ең кішкентай болса, өз-өзімен алмасады). Сосын, массивтегі екінші кішкентай элементті таңдап, оны массивтің екінші элементімен алмастырамыз. Осы процессті массивтің элементтері біткенше қайталаймыз, соңында элементтері сұрыпталған массивке қол жеткіземіз.
Айтылған нәрсе есте қалуы үшін код жазып көрейік (Java тілінде):
Бұл кодтың нәтижесі, сұрыпталған мынадай массив шығады:
Бұл алгоритмді түсіну оңай, қолдану қарапайым. Дегенмен, бұл алгоритмнің жағымсыз бірқатар қасиеттері бар. Алгоритмдегі цикл берілген массивтің ұзындығына пропорционалды өсе береді. Сонымен қоса, егер сіз бұл алгоритмге сұрыпталған массив берсеңіз де сол циклдар орындала береді, өйткені бұл алгоритмде массивтің барлық элементі туралы ақпар жоқ.
Таңдау арқылы сұрыптау алгоритмінің видеосын қарай отырыңыздар:
Айталық сізге бір массив берілді. Бұл массив элементтерін «таңдау» арқылы, төменнен жоғары қарай былай сұрыптаймыз. Алдымен, массивтегі ең кішкентай элементті тауып (таңдап) алып, оны ең бірінші элементпен алмастырамыз. (Егер ең бірінші элемент ең кішкентай болса, өз-өзімен алмасады). Сосын, массивтегі екінші кішкентай элементті таңдап, оны массивтің екінші элементімен алмастырамыз. Осы процессті массивтің элементтері біткенше қайталаймыз, соңында элементтері сұрыпталған массивке қол жеткіземіз.
Айтылған нәрсе есте қалуы үшін код жазып көрейік (Java тілінде):
package Algs;
public class SelectionSort {
static public void main(String[] args)
{
int[] a = {4,5,2,45,32,98,44,55,123}; //берілген массив
for(int i = 0; i < a.length; i++)
{
int min = i;
for(int j = i+1; j < a.length; j++)
{
if(a[j] < a[min])
{
min = j;
}
}
int t = a[min];
a[min] = a[i];
a[i] = t;
}
// нәтижесін консолға шығарамыз
for(int k = 0; k < a.length; k++)
{
System.out.println(a[k]);
}
}
}
Бұл кодтың нәтижесі, сұрыпталған мынадай массив шығады:
2
4
5
32
44
45
55
98
123
Бұл алгоритмді түсіну оңай, қолдану қарапайым. Дегенмен, бұл алгоритмнің жағымсыз бірқатар қасиеттері бар. Алгоритмдегі цикл берілген массивтің ұзындығына пропорционалды өсе береді. Сонымен қоса, егер сіз бұл алгоритмге сұрыпталған массив берсеңіз де сол циклдар орындала береді, өйткені бұл алгоритмде массивтің барлық элементі туралы ақпар жоқ.
Таңдау арқылы сұрыптау алгоритмінің видеосын қарай отырыңыздар:
-
+2
Қысқаша айтқанда алгоритмнің қиындығы: O(n2)
Сапалы жазба, жалғастырасыз деп үміттенемін.