3-amaliy mashg‟ulot Mavzu: Saralash usullarini tadqiq qilish. Ishdan maqsad



Yüklə 0,55 Mb.
Pdf görüntüsü
səhifə5/7
tarix13.10.2022
ölçüsü0,55 Mb.
#118267
1   2   3   4   5   6   7
3-amaliy ish

Dastur kodi 
#include  
#include  
using namespace std; 
struct table{ 
int t; 
string FIO
};
int q=0; 
void qs(table *a,int first,int last){ 
int i = first, j = last;table x =a[(first + last) / 2]; 
do { 
while (a[i].FIO < x.FIO) i++; 
while (a[j].FIO > x.FIO) j--; 
if(i <= j) { 


if (i < j){ swap(a[i], a[j]);q++;} 
i++; 
j--; 

} while (i <= j); 
if (i < last) 
qs(a,i,last); 
if (first < j) 
qs(a,first,j); 

int main(int args, char *argv[]) 
{ int n;cout<<"n=";cin>>n; 
table talaba[n]; 
for(int i=0;i
talaba[i].t=i+1; 
cin>>talaba[i].FIO; 

qs(talaba,0,n-1); 
for(int i=0;i
cout<
cout<<"quicksort algoritmi "<
saraladi\n"; 
system("PAUSE"); 



Birlashtirish orqali (MergeSort) saralash. MergeSort O(NlogN) da 
ishlaydigan optimal saralash algoritmlaridan biri. Eng yaxshi holatda ham, eng 
yomon holatda ham O(NLogN) assimptotikada ishlaydi. Hamda, u barqaror 
saralaydi, ya‟ni sonlar ketma-ketligini buzmagan holda. Masalan, sonlardan 
tashqari, ularning kalit sonlari bo„lsa, kalit soni 3 bo„lgan 2 soni kalit soni 5 
bo„lgan 2 sonidan oldin kelsa, MergeSortda saralangandan so„ng ham kalit soni 3 
bo„lgan 2 soni oldin keladi. QuickSort da doim ham bu shart bajarilavermaydi. 
Algoritmning ishlash prinsipi quyidagicha: Massivni teng ikkiga bo„lamiz. 
O„ng tomonni alohida saralaymiz, chap tomonni alohida. So„ng ikki saralangan 
qismni O(n) ya‟ni n ta operatsiyada qo„shib, to„liq saralangan massiv olamiz. 
Aynan shu operatsiya, ya‟ni qo„shish - Merge ning hisobiga algoritm shunday 
nom olgan. Endi chap va o„ng tomonlarini saralash uchun ham, ularni ikkiga bo„lib 
xudi shu ishni bajaramiz va hk. Massivni bo„lishni to unda 2 ta element qolguncha 
davom ettiramiz. 
Faraz qilaylik, bizda Merge(a: Array of Integer, Left, Mid, Right: Integer) 
funksiyasi bo„lsin. YA‟ni, a massivning L -Mid qismi saralangan, Mid + 1 -
R qismi saralangan. Shu qismlarni qo„shib, L –R kesmada saralangan qilish. 
Bunda Mid L va R kesma o„rtasi. 
3.4-rasm. 
3.5-rasm. 
3.6-rasm. 
3.7-rasm. 


3.8-rasm. 
3.9-rasm. 
3.10-rasm
3.11-rasm. 
3.12-rasm.
3.13-rasm. 
[L, R] oraliq m=(L+R) / 2 o„rtasi orqali ikkita [L, m] va [m+1, R] oraliqqa 
ajratiladi va ular alohida saralanadi.
3.14-rasm. 


Shunday Merge funksiya asosida MergeSortni quyidagicha yozish mumkin. 
#include 
using namespace std; 
int helper[1000001]; 
void Merge(int a[],int left,int middle,int right){ 
for(int i=left,j=middle,k=left;k
if(i==middle){ helper[k]=a[j++];continue;} 
if(j==right ){ helper[k]=a[i++];continue;} 
helper[k]=( a[i]< a[j])?a[i++]: a[j++]; 

for(int k=left;k

void MergeSort(int a[],int left,int right){ 
if(right-left==1)return; 
int middle=(left+right)>>1; 
MergeSort(a,left,middle); 
MergeSort(a,middle,right); 
Merge(a,left,middle,right); 

int main(){ 
int a[10000], n , i; 
cin>>n; 
for(i=0;i>a[i]; 
MergeSort(a,0,n); 
for(i=0;i
return 0; 
} 



Yüklə 0,55 Mb.

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




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

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin