2-Amaliy ishi. Qidiruv usullarini tadqiq qilish



Yüklə 321,65 Kb.
səhifə5/5
tarix16.12.2022
ölçüsü321,65 Kb.
#75355
1   2   3   4   5
algo 2 lab

Transpozitsiya usuli

Ushbu usulda topilgan element ro‘yhatda bitta oldingi element bilan o‘rin almashtiriladi. Agarda mazkur elementga ko‘p murojaat qilinsa, bittadan oldinga surilib borib natijada ro‘yhat boshiga kelib qoladi. Ushbu usulning afzalligi shundaki, tuzilmada ko‘p murojaat qilinadigan elementlar ro‘yhat boshiga bitta qadam bilan intiladi.


Ushbu usulning qulayligi u nafaqat ro‘yhatda, balki tartiblanmagan massivda ham samarali ishlaydi (sababi faqatgina ikkita yonma-yon turgan element o‘rin almashtiriladi).
Bu usulda uchta ko‘rsatkichdan foydalanamiz (5.3-rasm):
p – ishchi ko‘rsatkich
q – yordamchi ko‘rsatkich, p dan bitta qadam orqada bo‘ladi
s – yordamchi ko‘rsatkich, p dan ikkita qadam orqada bo‘ladi

5.3-rasm. Transpozitsiya usuli bilan ro‘yhatni qayta tartibga keltirish

Biz tomonimizdan topilgan uchinchi element ro‘yhat boshiga bir qadam suriladi (ya’ni ikkinchi bo‘lib qoladi). Birinchi element ko‘rsatkichi uchinchi elementga joylashtiriladi, ikkinchi element ko‘rsatkichi to‘rtinchi, shunday qilib uchinchi element ikkinchi joyga joylashib qoladi. Agar mazkur elementga yana bir bor murojaat qilinsa, u holda u ro‘yhat boshida bo‘lib qoladi.
node *s=NULL;
node *q=NULL;
node *p=table;
while (p != NULL){
if (key == p->k){ //transponerlaymiz
if( q ==NULL){//o‘rinlashtirish shart emas
search=p;
exit(0);
}
q->nxt=p->nxt;
p->nxt=q;
if (s == NULL) table = p;
else s->nxt = p;
search=p;
exit(0);
}
s=q;
q=p;
p=p->nxt;
}

4-variant:



  1. Ketma-ket va binar qidiruv usulidan foydalanib, A massivdan elementni va taqqoslashlar sonini toping.

#include


#include
#include
#include
#define f first
#define s second
#define pir pair
#pragma GCC optimize("Ofast")
using namespace std;

pairline_search(int a[],int n,int x){


int c=0;
for(int i=0;iif(a[i]==x) return pir(c,i);
c++;
}
return pir(0,-1);
}

pairbinary_search(int a[],int n,int x){


int d=0;
int l=0,r=n-1;
while(l<=r){
int mid=(l+r)/2;
if(a[mid]==x){
return pir(d,mid);
}else if(x>a[mid]){
l=mid+1;
}else{
r=mid-1;
}
d++;
}
return pir(0,-1);
}

int main(){


ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int n; cin>>n;
int a[n];
for(int &i:a) i=rand()%50+1,cout<sort(a,a+n);
cout<<"\nMassiv saralangandan so'ng\n";
for(int i:a) cout<int x; cout<<"\nLinear search da qidiruv jarayonini amalga oshirish uchun qiymat kiriting: "; cin>>x;
pairc=line_search(a,n,x);
if(c.s!=-1) cout<else cout<cout<<"\n";
cout<<"Binary search da qidiruv jarayonini amalga oshirish uchun qiymat kiriting: "; cin>>x;
paird=binary_search(a,n,x);
if(d.s!=-1) cout<else cout< return 0;
}

Yüklə 321,65 Kb.

Dostları ilə paylaş:
1   2   3   4   5




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin