Tema: Programarea Procedurală A Algoritmilor de Sortare A Datelor Din Array (-Uri) 1-D & 2-D
Tema: Programarea Procedurală A Algoritmilor de Sortare A Datelor Din Array (-Uri) 1-D & 2-D
al Republicii Moldova
RAPORT
despre lucrarea de laborator Nr. 2
la Structuri de Date si Algoritmi
Chişinău – 2020
Mersul lucrării:
EX I
Codul:
#include <stdio.h>
int len;
int temp;
int main(){
int i,k,l;
printf("Introdu marimea array-ului(numar impar): ");
scanf("%d", &len);
if(len%2 != 1){
len++;
printf("Ai introdus un nr par, lungimea este %d", len); }
int arr1[len], arr2[len];
printf("\nIntrodu elementele array-ului: \n");
for(i=0;i<len;i++){
printf("Element[%d]: ", i);
scanf("%d", &arr1[i]);
arr2[i] = arr1[i]; }
printf("Introdu index k si index l"); scanf("%d %d", &k, &l);
modificare(arr1,arr2,k,l);
printf("\nArray-ul original: ");
for(i=0;i<len;i++){
printf("%d ", arr1[i]);}
printf("\nArray-ul Schimbat: ");
for(i=0;i<len;i++){
printf("%d ", arr2[i]);}
quicksortCrescator(arr1, 0, len-1); printf("\nArray-ul original sortat crescator
prin Quick Sort: ");
for(i=0;i<len;i++){
printf("%d ", arr1[i]);}
quicksortDescrescator(arr1, 0, len-1); printf("\nArray-ul original sortat
descrescator prin Quick Sort: ");
for(i=0;i<len;i++){
printf("%d ", arr1[i]);}
shellSortCrescator(arr2, len); printf("\nArray-ul modificat sortat crescator prin
Shell Sort: ");
for(i=0;i<len;i++){
printf("%d ", arr2[i]);}
shellSortDescrescator(arr2, len); printf("\nArray-ul modificat sortat descrescator
prin Shell Sort: ");
for(i=0;i<len;i++){
printf("%d ", arr2[i]);}
return 0;}
int modificare(int *arr1, int *arr2, int a, int b){
int i,j;
for(i=a, j=b-1; i<b; i++,j--){
arr2[i] = arr1[j];}
int quicksortCrescator(int *arr, int low, int high){
if (low<high){
int pi = partitieCrescatoare(arr, low, high);
quicksortCrescator(arr, low, pi-1);
quicksortCrescator(arr, pi+1, high);}
return 0;}
int partitieCrescatoare(int *arr, int low, int high){
int pivot = arr[high];
int i = (low - 1);
for(int j = low; j<= high - 1; j++){
if(arr[j] < pivot){
i++;
swap(&arr[i], &arr[j]);}}
swap(&arr[i+1], &arr[high]);
return (i+1);}
void swap(int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;
}
int quicksortDescrescator(int *arr, int low, int high){
if (low<high){
int pi = partitieDescrescatoare(arr, low, high);
quicksortDescrescator(arr, low, pi-1);
quicksortDescrescator(arr, pi+1, high);
}
return 0;
int partitieDescrescatoare(int *arr, int low, int high){
int pivot = arr[high];
int i = (low - 1);
for(int j = low; j<= high - 1; j++){
if(arr[j] > pivot){
i++
swap(&arr[i], &arr[j]);}}
swap(&arr[i+1], &arr[high]);
return (i+1);}
int shellSortCrescator(int *arr, int n)
{
for (int gap = n/2; gap > 0; gap /= 2)
{
for (int i = gap; i < n; i += 1)
{
int temp = arr[i];
int j;
for (j = i; j >= gap && arr[j - gap] > temp; j -= gap)
arr[j] = arr[j - gap];
arr[j] = temp; } }
return 0;}
Array-ul original: 5 9 3 4 1 2 88
Array-ul dupa schimbari: 5 1 4 3 9 2 88
Array-ul original sortat crescator: 1 2 3 4 5 9 88
Array-ul original sortat descrescator: 88 9 5 4 3 2 1
Array-ul modificat sortat crescator prin Shell Sort: 1 2 3 4 5 9 88
Array-ul modificat sortat descrescator prin Shell Sort: 88 9 5 4 3 2 1
Ex 2
Codul:
#include <stdio.h>
int t,i,j,m;
int produs = 1;
int main(){
int idx=0, idx1, idx2;
printf("Introdu dimensiunea MxM ale array-ului: "); scanf("%d", &m);
int arr1[m][m], arr2[m*m], arr3[m][m],ultimRand[m];
printf("Introdu elementele array-ului: \n");
for(i=0;i<m;i++){
for(j=0;j<m;j++){
printf("Element[%d][%d]: ", i,j); scanf("%d", &arr1[i][j]);
arr3[i][j] = arr1[i][j];
arr2[idx] = arr1[i][j];
idx++;}}
printf("Array-ul de input este: \n");
for(i=0;i<m;i++){
for(j=0;j<m;j++){
printf("%d ", arr1[i][j]);
}printf("\n");}
printf("Acesta este array-ul sub forma unui array 1-D");
for(i=0;i<m*m;i++){
printf("%d ", arr2[i]);}
printf("\nIntrodu indecsii de start si final: ");scanf("%d %d", &idx1, &idx2);
laPatrat(arr2, idx1, idx2);
idx = 0;
for(i=0;i<m;i++){
for(j=0;j<m;j++){
arr3[i][j] = arr2[idx];
idx++; }}
printf("Array-ul dupa interschimbare: \n");
for(i=0;i<m;i++){
for(j=0;j<m;j++){
printf("%d ", arr3[i][j]);
}printf("\n");}
for(i=0;i<m;i++){
ultimRand[i] = arr3[m-1][i];}
countingSort(arr1, m);
printf("Array-ul original cu primul rand sortat crescator: \n");
for(i=0;i<m;i++){
for(j=0;j<m;j++){
printf("%d ", arr1[i][j]);
}printf("\n");}
heapSort(ultimRand,m);
for(i=0;i<m;i++){
arr3[m-1][i] = ultimRand[i];}
printf("Array-ul modificat cu ultimul rand sortat descrescator");
for(i=0;i<m;i++){
for(j=0;j<m;j++){
printf("%d ", arr3[i][j]);
}printf("\n");}
return 0;}
int laPatrat(int arr[m], int a, int b){
for(i=a;i<b;i++){
arr[i] *= arr[i]; }
return 0;}
swap(arr[0], arr[i]);
heapify(arr, i, 0);}}
void swap(int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;}
Output:
Concluzie:
În aceasta lucrare de laborator am lucrat cu diferite tipuri de sortare cum ar fi
Counting Sort cresctator și descrescator, atât cât și cu Quick Sort și Shell Sort
. Am folosit aceste sortari în array-uri unidimensionale și bidimensionale. Am
folosit și funcții parametrice.