int main()
{
const int arrSize = 30;
int arr[arrSize];
int requiredKey = 0; // qidirilayotgan qiymat (kalit)
int nElement = 0; // massiv elementining nomeri
srand(time(NULL));
//massivga 1 dan 50 gacha bo'lgan tasodifiy sonlarni yozish
for (int i = 0; i < arrSize; i++)
{
arr[i] = 1 + rand() % 50;
}
showArr(arr, arrSize);
cout << "Qidirilayotgan qiymatni kirit: ";
cin >> requiredKey; // ââîä èñêîìîãî ÷èñëà
//elementni qidirish va uning positsiyasini eslab qolish
nElement = linSearch(arr, requiredKey, arrSize);
if (nElement != -1)
{
//agar element topilsa uning pozitsiyasini ekranga chiqarish
cout << "Qidirilayotgan qiymat " << requiredKey << " massivning " << nElement
<< " -indeksida joylashgan"<
}
Else
{
//agar element topilmasa
cout << "Massivda bunday qiymatli son mavjud emas..." << endl;
}
return 0;
}
//massivni ekranga chiqarish funksiyasi
void showArr(int arr[], int arrSize)
{
for (int i = 0; i < arrSize; i++)
{
cout << setw(4) << arr[i];
if ((i + 1) % 10 == 0)
{
cout << endl;
}
}
cout << endl << endl;
}
//chiziqli qidiruv funksiyasi
int linSearch(int arr[], int requiredKey, int arrSize)
{
for (int i = 0; i < arrSize; i++)
{
if (arr[i] == requiredKey)
return i;
}
return -1;
}
Dasturni ishga tushirsak, quyidagi natijani beradi:
3.Binar qidiruv qanday tuzilgan?
Biz chiziqli qidiruv algoritmlarini qarab chiqdik. Qidiruvning boshqa algoritmlari
ham mavjud. Masalan, ikkilik (binar) qidiruv algoritmi. Biz yuqorida chiziqli qidiruv
algorimtlaridan indeksli ketma-ket qidirish usulini qarab chiqdik. Bunda qayta
ishlanayotgan tuzilma elementlarini saralangan bo’lishi kerak edi. Xuddi shunday binar
qidiruv algoritmi ham saralangan tuzilmalar ustida qo’llanilsa, yuqori samara beradi.
Faraz qilaylik, bizga 12 ta elementdan iborat, o’sish tartibida saralangan quyidagi
massiv berilgan bo’lsin:
Foydalanuvchi tomomnidan kiritilgan qidiruv kaliti asosida qidirilayotgan
elementni topish masalasi qo’yilgan. Masalan, kalit 4 ga teng.
Birinchi qadamda massiv teng ikkiga bo’linadi (buning uchun o’rta element -
midd ni topib olamiz): (0 + 11) / 2 = 5 (bo’linmaning butun qism olinadi, 0.5 tashlab
yuboriladi). Birinchi massiv elementlarining o’rta qiymatini tekshiramiz, agar u kalit
bilan mos kelsa, algoritm o’z ishini yakunlaydi va topilgan element haqida axborot
Do'stlaringiz bilan baham: |