Sunteți pe pagina 1din 5

MINISTERUL EDUCAȚIEI, CULTURII ȘI CERCETĂRII AL REPUBLICII MOLDOVA

IP CENTRUL DE EXCELENȚĂ ÎN INFORMATICĂ ȘI TEHNOLOGII


INFORMAȚIONALE

DISCIPLINA

UTILIZAREA TEHNICILOR CLASICE DE PROGRAMARE

LUCRAREA DE LABORATOR NR.7

SHELL SORT

Specialitatea: Programare și analiza produselor program

Elev: Ciobanu Stanislav, grupa P-1831

Profesor: Dascal Andrian

Chișinău, 2020
Sarcini rezolvate
1. Aplicând bucla while (în loc de for) în algoritmul ShellSort sortați elementele
masivului atât în ordine ascendentă, cât și în ordine descendentă.

Vectorul inițial:
78, 56, 97, 22, 46, 77, 54, 14, 44, 50

Rezolvare:
#include <iostream>
#include <conio.h>

using namespace std;

// Algoritmul shellsort crescator


int shellSortAscendent(int arr[], int N){
int gap = N/2;
while(gap > 0) {
int i = gap;
while(i < N) {
int current = i - gap;
while(current >= 0) {
if(arr[current] > arr[current + gap]) {
int temp = arr[current];
arr[current] = arr[current + gap];
arr[current + gap] = temp;
current -= gap;
}
else { break; }
}
i++;
}
gap /= 2;
}
return 0;
}

// Algoritmul shellsort descrescator


int shellSortDescendent(int arr[], int N){
int gap = N/2;
while(gap > 0) {
int i = gap;
while(i < N) {
int current = i - gap;
while(current >= 0) {
if(arr[current] < arr[current + gap]) {
int temp = arr[current];
arr[current] = arr[current + gap];
arr[current + gap] = temp;
current -= gap;
}
else { break; }
}
i++;
}
gap /= 2;
}
return 0;
}
int showArray(int arr[], int N){
for (int i=0; i<N; i++)
cout << arr[i] << " ";
cout<<endl;
return 0;
}

// Programul principal
int main(){
Vectorul ce trebuie de sortat:
// Vectorul de elemente ce trebuie de ordonat
78 56 97 22 46 77 54 14 44 50
int arr[] = {78,56,97,22,46,77,54,14,44,50}, i;
// Calculăm dimensiunea vectorului (masivului)
Vectorul sortat crescator:
int N = sizeof(arr)/sizeof(arr[0]);
14 22 44 de
cout << "Vectorul ce trebuie 46 50sortat:
54 56 77 78 97
\n\t";
showArray(arr, N);
shellSortAscendent(arr,Vectorul
N); sortat descrescator:
cout << "\nVectorul sortat
97 78 crescator:
77 56 54 50 46 44\n\t";
22 14
showArray(arr, N);
shellSortDescendent(arr, N);
cout << "\nVectorul sortat descrescator: \n\t";
showArray(arr, N);
getch(); //pause
return 0;
}

Rezultate obținute în urma execuției programului:

2. Aplicând bucla while (în loc de for) în algoritmul ShellSort sortați elementele
masivului atât în ordine ascendentă, cât și în ordine descendentă.

Vectorul inițial:
66, 98, 78, 92, 31, 89, 91, 28, 38, 55
Rezolvare:
#include <iostream>
#include <conio.h>

using namespace std;

// Algoritmul shellsort crescator


int shellSortAscendent(int arr[], int N){
int gap = N/2;
while(gap > 0) {
int i = gap;
while(i < N) {
int current = i - gap;
while(current >= 0) {
if(arr[current] > arr[current + gap]) {
int temp = arr[current];
arr[current] = arr[current + gap];
arr[current + gap] = temp;
current -= gap;
}
else { break; }
}
i++;
}
gap /= 2;
}
return 0;
}

// Algoritmul shellsort descrescator


int shellSortDescendent(int arr[], int N){
int gap = N/2;
while(gap > 0) {
int i = gap;
while(i < N) {
int current = i - gap;
while(current >= 0) {
if(arr[current] < arr[current + gap]) {
int temp = arr[current];
arr[current] = arr[current + gap];
arr[current + gap] = temp;
current -= gap;
}
else { break; }
}
i++;
}
gap /= 2;
}
return 0;
}

int showArray(int arr[], int N){


for (int i=0; i<N; i++)
cout << arr[i] << " ";
cout<<endl;
return 0;
}

// Programul principal
int main(){
// Vectorul de elemente ce trebuie de ordonat
int arr[] = {66,98,78,92,31,89,91,28,38,55}, i;
// Calculăm dimensiunea vectorului (masivului)
int N = sizeof(arr)/sizeof(arr[0]);
cout << "Vectorul ce trebuie de sortat: \n\t";
showArray(arr, N);
shellSortAscendent(arr, N);
cout << "\nVectorul sortat crescator: \n\t";
showArray(arr, N);
shellSortDescendent(arr, N);
cout << "\nVectorul sortat descrescator: \n\t";
showArray(arr, N);
getch(); //pause
return 0;
}

Rezultate obținute în urma execuției programului:

Vectorul ce trebuie de sortat:


66 98 78 92 31 89 91 28 38 55

Vectorul sortat crescator:


28 31 38 55 66 78 89 91 92 98

Vectorul sortat descrescator:


98 92 91 89 78 66 55 38 31 28

S-ar putea să vă placă și