Yana bir misol - Dasturlash asoslar

|
Dasturlash asoslar
|
bet | 7/10 | Sana | 14.05.2024 | Hajmi | 0,66 Mb. | | #230790 |
Bog'liq Massiv kurs ishiYana bir misol:
class Program
{
static void Main(string[] args)
{
int[] i = {4,3,7,23,6,8,123,6,32 };
QuickSort(i,0,8);
foreach(int w in i)
{
Console.WriteLine(w);
}
Console.ReadKey();
}
private static int[] QuickSort(int[] a, int i, int j)
{
if (i < j)
{
int q = Partition(a, i, j);
a = QuickSort(a, i, q);
a = QuickSort(a, q + 1, j);
}
return a;
}
private static int Partition(int[] a, int p, int r)
{
int x = a[p];
int i = p - 1;
int j = r + 1;
while (true)
{
do
{
j--;
}
while (a[j] > x);
do
{
i++;
}
while (a[i] < x);
if (i < j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
else
{
return j;
}
}
}
}
Natija gif:
Qidirish (Searching) metodlari:
Linear Search (Chiziqli qidirish):
Massivni boshidan boshlab har bir elementni tekshiradi.
Qidirilayotgan elementni topganda to‘xtaydi.
Binary Search (Ikki-radiksli qidirish):
Massivni o‘rtasidan boshlab qidirish amalga oshiradi.
Qidirilayotgan elementni o‘rtadagi element bilan solishtiradi va qidirilayotgan elementni joylashuvini aniqlaydi. Massiv o‘rtasida qisqa qismini qayta qidiradi, va bu jarayonni takrorlaydi.
Hashing (Hashlash): Elementlarni bir qanday unikal kalit (hash) orqali joylashtiradi.
Hash funksiyasi orqali qidirish tez va samarali bo‘ladi.
Massivlarni tezkor saralash. Ichki saralash modeli. Ma’lumotlar EHM xotirasida muayyan tartibda saqlanadigan bo‘lsa, axborotga ishlov berish va uni izlash bilan bog‘liq ko‘p masalalar oddiyroq, tezroq va samaraliroq hal qilinadi. Bir qator hollarda ma’lumotlarning tartibga solinganligidan foyda aniq bo‘lib, maxsus isbotlashlarni talab etmaydi. Agar lug‘at yoki telefon ma’lumotnomasida so‘zlar va familiyalar alifbo tartibida joylashtirilmaganda ulardan foydalanish qanchalik qiyin bo‘lishini tasavvur etish mumkin. Lekin ma’lumotlarni tartiblash zaruriyati masalasi har safar muayyan vazifaga nisbatan hal qilinishi zarur. Bunda tashqi xotira qurilmalari imkoniyatlari, operativ xotira hajmi, ma’lumotlarga murojaat qilish tezligi, ularni yangilab turish tezligi va ishlov berish xarakteri kabilarni tahlil qilish zarur. Turli ilovalarda tartibga solishning turli mezonlaridan foydalaniladi. Ma’lumotlar ularga murojaat qilish ehtimolining qiymati, qancha tez-tez murojaat etib turilishiga ko‘ra tartibga solinishi mumkin. Odatda, tartibga solish kalit bo‘yicha amalga oshiriladi. Axborot tizimlari bilan ishlov beradigan ma’lumotlar birligi bir qator axborot maydonlaridan iborat bo‘lgan yozuv hisoblanadi. Kalit bitta yozuv maydoni ichidagi yoki muayyan maydonlar majmuidan iborat bo‘lishi mumkin. Keyingi holda kalit tarkibiy deb ataladi. Yozuv faqat bittagina maydondan iborat bo‘lishi mumkin va bu holda u kalitli hisoblanadi.
Tartibga solish natijasida yozuvlar kalitlarning qiymati ortib borishi yoki kamayib borish bo‘yicha joylashadi. Bunday tartibga solish jarayoni tartiblash deb ataladi. Masalan, fakultet talabalari to‘g‘risidagi ma’lumotlardan iborat bo‘lgan yozuvlar talabalarning reyting daftarchalari nomerlari bo‘yicha tartibga solingan bo‘lishi mumkin. Ichki tartiblashning ko‘plab usullari mavjud va ularning har biri o‘z afzalli texnikalari va texnik kamchiliklariga ega bo‘lib, ma’lumotlar va apparaturaning muayyan konfigurasiyalarida boshqalaridan samaraliroq bo‘lishi mumkin ekan. Tartiblash usullarining tavsiflarini baholash har bir muayyan holatda bu usullardan birini to‘g‘ri tanlash texnik imkonini beradi. Saralashning sodda sxemalari.
Eng sodda tartiblash usullaridan biri bo‘lib «pufakcha» usuli hisoblanadi. Bu algoritmning asosiy g‘oyasini yozish uchun tartiblanishi kerak bo‘lgan yozuvlar vertikal joylashgan massivda saqlanadi deb faraz qilamiz. Kalit maydonning kichik qiymatli yozuvlari «yengil» va shuning uchun pufakcha kabi ular yuqoriga «suzib chiqadi». Massiv bo‘ylab birinchi o‘tishda massivning birinchi yozuvi olinadi va uning kaliti navbatma-navbat keyingi yozuvlarning kalitlari bilan solishtirib boriladi.
Agar nisbatan «og‘ir» kalitli yozuvlar uchrasa, u holda bu yozuvlar joyini almashtiradi. Nisbatan «yengil» yozuvlar uchraganda bu yozuv taqqoslash uchun etolon bo‘ladi va keyingi barcha yozuvlar shu kalit bilan solishtiriladi. Natijada eng kichik qiymatli kalit massivning eng yuqorisiga chiqadi. Massiv bo‘ylab ikkinchi o‘tishda massivning massivni birinchi o‘tishda topilgan yozuvdan keyin joylashgan og‘irligi bo‘yicha ikkinchi kalit olinadi. Massiv bo‘ylab ikkinchi va keyingi o‘tishlarda oldingi o‘tishlarda topilgan yozuvlarni ko‘rib chiqish shart emas, chunki ular qolgan yozuvlarga qaraganda kichik kalitlarga ega. Boshqacha qilib aytganda, t – o‘tishda i pozitsiya yuqorida turgan elementlar tekshirilmaydi. 1-Dasturda ushbu algoritm keltirilgan. «pufakcha» algoritmi (1) for i:=I to n - 1 do (2) for j:= 1 downto i + 1 do (3) if A[j].key < A[j - 1].key then (4) swap(A[j], A[j - 1]) swap protsedurasi yozuvlarning o‘rnini almashtirish uchun ko‘plab tartiblash algoritmlarida ishlatiladi, uning kodi quyidagi dasturda keltirilgan. Yuqoridagi dasturda swap protsedurasi procedure swap (var x, u: recordtype) {swap x va u yozuvlarning o‘rnini almashtiradi} var temp: recordtype; begin temp:= x; x:= y; y:= temp; end; { swap }
|
| |