2.2-§. Massivlarni saralash va qidirish metodlari.
Saralash (Sorting) Metodlari:
Bubble Sort (Puzyr'kovaya Sortirovka):
Odatda o‘zgartirishli algoritmlar qatoridan biridir.
Har bir bosqichda ikki elementni solishtiradi va kerak bo‘lsa almashtiradi.
O‘nlik birinchi marta, eng katta element o‘ng tomonga olib boradi, keyin yana o‘nlik birinchi marta, ikkinchi eng katta elementni o‘ng tomonga olib boradi va hokazo.
Selection Sort (Tanlash orqali saralash):
Eng kichik elementni tanlaydi va o‘ng tomoniga joylashtiradi.
Keyin, qolgan massivni (tanlangan elementni tashlamasdan) qayta qidirish orqali bu jarayonni takrorlaydi.
Misol:
private static void BubbleSort(int[] array)
{
for (int i = 0; i < array.Length; i++)
for (int j = 0; j < array.Length - 1; j++)
if (array[j] > array[j + 1])
{
int t = array[j + 1];
array[j + 1] = array[j];
array[j] = t;
}
}
public static void Main()
{
int[] array = {5,3,4,9,7,2,1,8,6 };
BubbleSort(array);
foreach (int e in array)
Console.WriteLine(e);
Console.ReadKey();
}
Natija gif:
Insertion Sort (saralash):
Har bir bosqichda o‘rtadagi elementni o‘ng tomonga joylashtiradi.
Tizimi tashkil etgan massivni (o‘ng tomonda joylashgan elementni tashlamasdan) qayta qidirish orqali bu jarayonni takrorlaydi.
Merge Sort (Biriktirish orqali saralash):
Massivni ikki qismga bo‘lib, har bir qismni alohida saralaydi.
Keyin, saralgan qismlarni biriktirib, to‘g’ridan to‘g’ri saralgan massivni olish uchun o‘zaro bog’lab chiqadi.
Misol:
static int[] temporaryArray;
static void Merge(int[] array, int start, int middle, int end)
{
var leftPtr = start;
var rightPtr = middle + 1;
var length = end - start + 1;
for (int i = 0; i < length; i++)
{
if (rightPtr > end || (leftPtr <= middle && array[leftPtr] < array[rightPtr]))
{
temporaryArray[i] = array[leftPtr];
leftPtr++;
}
else
{
temporaryArray[i] = array[rightPtr];
rightPtr++;
}
}
for (int i = 0; i < length; i++)
array[i + start] = temporaryArray[i];
}
static void MergeSort(int[] array, int start, int end)
{
if (start == end) return;
var middle = (start + end) / 2;
MergeSort(array, start, middle);
MergeSort(array, middle + 1, end);
Merge(array, start, middle, end);
}
static void MergeSort(int[] array)
{
temporaryArray = new int[array.Length];
MergeSort(array, 0, array.Length - 1);
}
public static void Main()
{
int [] array = {3,2,5,7,8,1,9 };
MergeSort(array);
foreach (var e in array)
Console.WriteLine(e);
Console.ReadKey();
}
Dostları ilə paylaş: |