NAZARIY QISM(1-90)
Massivlarni saralash algoritmlari.
(boshi,2 va 3 savollarda)
Taroqsimon saralash
Pufaksimon saralashning yana bir modifikatsiyasi. "Toshbaqalar" dan qutulish uchun biz elementlarni masofadan turib qayta joylashtiramiz. Keling, uni tuzatamiz va agar kerak bo'lsa, ularni qayta tartibga solib, elementlarni shu masofada taqqoslab, chapdan o'ngga boraylik. Shubhasiz, bu "toshbaqalar" ga massivning boshiga tezda etib borishiga imkon beradi. Dastlab massivning uzunligiga teng masofani bosib, keyin uni taxminan 1,247 ga teng bo'lgan bir necha omillarga bo'lish maqsadga muvofiqdir. Masofa birga teng bo'lganda, pufaksimon saralash amalga oshiriladi.
#include
#include
//@TBCLbot
using namespace std;
int main()
{
int k;
cout<<"k="; cin>>k;
int A[k];
int k1=k;
srand(time(NULL));
{
b = false;
for(int i=0; i+1{
if(A[i]>A[i+1])
{
swap(A[i],A[i+1]);
b = true;
}
}
}
for(int i=0; i {
A[i]=rand()%100;
cout< }
cout<
double l = 1.243309;
int step = k-1;
while (step>1)
{
for (int i = 0; i+step < k; i++)
{
if (A[i] > A[i + step])
{
swap(A[i], A[i + step]);
}
}
step /=l;
}
bool b =true;
while(b)
for(int i=0; i
{
cout<}
}
Joylashtirish usuli bo’yicha saralash
Algoritm tugagandan so'ng javobni o'z ichiga oladigan massiv yarataylik. Javoblar massividagi elementlar har doim saralanishi uchun biz navbatma-navbat asl massivdan elementlarni kiritamiz
#include
#include
using namespace std;
int main()
{
int k;
cout<<"k="; cin>>k;
int A[k];
int k1=k;
srand(time(NULL));
for(int i=0; i
{
A[i]=rand()%100;
cout<
}
cout<
for(int i=1; i
{
int j=i;
while(j>0 && A[j-1]>A[j]){
swap(A[j-1],A[j]);
j--;
}
}
for(int i=0; i
{
cout<
}
}
2. Massivlarni tanlash usuli bo’yicha saralash. 1. Tanlash usuli (Selected sort) bo’yicha saralash
Tanlash usuli saralash algoritmi massivni saralanmagan qismdan (o'sish tartibini hisobga olgan holda) minimal elementni bir necha bor topib, boshiga qo'yish orqali qatorni saralaydi. Algoritm berilgan massivda ikkita kichik jadvalni saqlaydi.
1) allaqachon tartiblangan ichki massiv.
2) saralanmagan qolgan ichki massiv.
Tanlash tartibining har bir takrorlanishida tartiblanmagan pastki qatordan minimal element (o'sish tartibini hisobga olgan holda) tanlanadi va saralangan pastki qatorga ko'chiriladi.
Quyidagi misol yuqoridagi qadamlarni tushuntiradi:
#include
using namespace std;
//@TBCLbot
void selectionSort(int arr[], int n)
{
int i, j, min_idx;
for (i = 0; i < n-1; i++)
{
min_idx = i;
for (j = i+1; j < n; j++)
if (arr[j] < arr[min_idx])
min_idx = j;
swap(arr[min_idx], arr[i]);
}
}
void printArray(int arr[], int size)
{
int i;
for (i=0; i < size; i++)
cout << arr[i] << " ";
cout << endl;
}
int main()
{
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr)/sizeof(arr[0]);
selectionSort(arr, n);
cout << "Saralangan massiv: \n";
printArray(arr, n);
return 0;
}
Do'stlaringiz bilan baham: |