Bir va ikki o‘lchovli massiv elementlarini tartiblash, qidirish algoritmlari va ularning murakkabligini tahlil qilish asosida dastur yaratish
Bir va ikki o‘lchovli massiv elementlarini tartiblash, qidirish algoritmlari va ularning murakkabligini tahlil qilish asosida dastur yaratish Reja: 1. Bir va ikki o’lchovli massiv elementlarni tartiblash 2. Qidirish algoritmlari 3. Algoritmning murakkabligini tahlil qilish
Massivni saralash - bu massivdagi barcha elementlarni ma'lum tartibda joylashtirish jarayoni. Bu ko'pincha foydalidir. Masalan, pochta qutingizdagi elektron pochta xabarlari qabul qilingan vaqtga qarab ko'rsatiladi; yangi elektron pochta xabarlari sizga yarim soat, bir soat, ikki yoki bir kun oldin kelgan elektron pochta xabarlariga qaraganda ko'proq mos keladi; kontaktlar ro'yxatiga kirganingizda, ismlar odatda alifbo tartibida bo'ladi, chunki shu tarzda biror narsani topish osonroq. Ushbu holatlarning barchasi ma'lumotlarni namoyish qilishdan oldin ularni saralashni o'z ichiga oladi. Saralash qanday ishlaydi? Ma'lumotlarni saralash nafaqat odamlar uchun, balki kompyuterlar uchun ham massiv ichidan qidirishni samaraliroq qilishi mumkin. Masalan, ismlar ro'yxatida ma'lum bir ism paydo bo'lishini bilishimiz kerak bo'lgan holatni ko'rib chiqaylik. Buni bilish uchun siz massivning har bir elementini bizning qiymatimiz bilan tekshirishingiz kerak. Ko'p elementli qatorni qidirish juda samarasiz (qimmat) bo'lishi mumkin. Biroq, bizning nomlarimiz qatori alfavit bo'yicha tartiblangan deb taxmin qiling. Keyin bizning qidiruvimiz ma'noning birinchi harfi bilan boshlanadi va alifboda keyingi harf bilan tugaydi. Bunday holda, agar biz ushbu harfga yetib borsak va ismini topa olmasak, unda biz bu qatorning qolgan qismida yo'qligini aniq bilamiz, chunki biz allaqachon o'z harfimizni alifbo tartibida topshirganmiz! Hech kimga sir emaski, tartiblangan massivlar ichida yanada yaxshi qidirish algoritmlari mavjud. Oddiy algoritmdan foydalanib, biz faqat 20 ta taqqoslash yordamida aniqlangan elementni 1000000 elementlardan iborat tartibda qidirishimiz mumkin! Salbiy tomoni shundaki, massivni juda ko'p sonli elementlarga ko'ra saralash nisbatan qimmatga tushadi va bitta qidiruv so'rovi uchun amalga oshirilmaydi.
Ba'zi hollarda, qatorni saralash qidirishni keraksiz holga keltiradi. Masalan, biz talabalar orasida eng yaxshi test balini qidirmoqdamiz. Agar massiv saralanmagan bo'lsa, unda biz eng yuqori ballni topish uchun massivning har bir elementini skanerlashimiz kerak bo'ladi. Agar massiv saralangan bo'lsa, unda eng yuqori ball birinchi pozitsiyada yoki oxirgisi bo'ladi (massivni saralash uslubiga qarab: ko'tarilish yoki tushish tartibida), shuning uchun biz qidirishning umuman hojati yo'q. Tartiblash odatda qator elementlari juftlarini qayta taqqoslash va belgilangan mezonlarga mos keladigan bo'lsa, ularni almashtirish orqali amalga oshiriladi. Ushbu elementlarni taqqoslash tartibi qaysi saralash algoritmidan foydalanilganiga bog'liq. Mezonlar massivning qanday tartiblanishini belgilaydi (masalan, ko'tarilish yoki tushish tartibida). Ikki elementni almashtirish uchun biz C ++ standart kutubxonasidan std :: swap () funktsiyasidan foydalanishimiz mumkin, bu sarlavha fayli algoritmida aniqlangan. C ++ 11 da std :: swap () funktsiyasi yordam dasturining sarlavha fayliga ko'chirildi: #include <iostream> #include <algorithm> int main() { int a = 3; int b = 5; std::cout << " a = " << a << ", b = " << b << '\n'; std::swap(a, b);
std::cout << " a = " << a << ", b = " << b << '\n'; } Dasturni bajarish natijasi: a=3, b=5 a=5, b=3 O'zgartirish operatsiyasidan so'ng a va b o'zgaruvchilarning qiymatlari almashtirildi. Massivlarni tanlash usuli bo'yicha saralash Massivlarni saralashning ko'plab usullari mavjud. Massivlarni tanlov usulidan foydalanib saralash, ehtimol bu eng oson bo'lsa ham, eng sekinlaridan biri. Massivni eng kichikdan kattagacha elementlarni tanlab saralash uchun quyidagi amallarni bajaring: - 0 indeksidagi elementdan boshlab biz massivdagi eng kichik qiymatni qidiramiz. - Topilgan qiymatni nol element bilan almashtiramiz. - Massivdagi keyingi indeks uchun # 1 va # 2 bosqichlarini takrorlang (endi saralangan elementga tegmang). Boshqacha qilib aytganda, biz massivdagi eng kichik elementni qidiramiz va uni birinchi o'ringa o'tkazamiz. Keyin biz ikkinchi eng kichik elementni qidiramiz va uni birinchi kichik elementdan keyin ikkinchi holatga o'tkazamiz. Ushbu jarayon massivda saralanmagan elementlar tugamaguncha davom etadi. Ushbu algoritm 5 ta elementdan iborat massivda qanday ishlashiga misol:
{ 30, 50, 20, 10, 40 } Birinchidan , biz 0 indeksidan boshlab eng kichik elementni qidiramiz : {30, 50, 20, 10, 40} Keyin biz eng kichik elementni 0 indeksidagi element bilan almashtiramiz: {10, 50, 20, 30, 40} Endi massivning birinchi elementi saralangan, biz unga e'tibor bermaymiz. Biz keyingi eng kichik elementni qidiramiz, lekin 1 indeksidan boshlaymiz: {10, 50, 20, 30, 40} Va biz uni indeks 1dagi element bilan almashtiramiz: {10, 20, 50, 30, 40} Endi biz dastlabki ikkita elementni e'tiborsiz qoldirmoqdamiz. Ikkinchi indeksdan boshlab keyingi eng kichik elementni qidiryapsiz: {10, 20, 50, 30, 40} Va biz uni indeks 2 da element bilan almashtiramiz: {10, 20, 30, 50, 40} 3-indeksdan boshlab keyingi eng kichik elementni qidiryapsiz: