Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 18

Disciplina: Structuri de date si algoritmi

Lucrare de laborator #1
Tema: Algoritmi de sortare

A efectuat student: *******

A controlat: Gutu Maria

Chişinău 2020
1. BubbleSort Crescator pe linii:

#include <stdlib.h>
#include <stdio.h>

void BSC(int a[], int n)


{
int i=0,j=0,tmp;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
}

int main() {
int n,i,j,m;
int a[100][100],b[100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) b[j]=a[i][j];
BSC(b,m);
for(j=0;j<m;j++) printf("%d ", b[j]);
printf("\n");
2
}

return 0;
}

2. BubbleSort Descrescator pe linii:

#include <stdlib.h>
#include <stdio.h>

void BSD(int a[], int n)


{
int i=0,j=0,tmp;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j]<a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
}

int main() {
int n,i,j,m;
int a[100][100],b[100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) b[j]=a[i][j];
BSD(b,m);
for(j=0;j<m;j++) printf("%d ", b[j]);
printf("\n");
}

return 0;
3
}

3. BubbleSort Crescator pe Coloane:

#include <stdlib.h>
#include <stdio.h>

void BSC(int a[], int n)


{
int i=0,j=0,tmp;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
}

int main() {
int n,i,j,m,o;
int a[100][100],b[100],c[100][100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]);
for(j=0;j<m;j++)
{
for(i=0;i<n;i++) b[i]=a[i][j];
BSC(b,m);
for(i=0;i<n;i++) c[i][j]=b[i];
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) printf("%d ",c[i][j]);
printf("\n");
}
return 0;

4
}

4. BubbleSort Descrescator pe coloane:

#include <stdlib.h>
#include <stdio.h>

void BSD(int a[], int n)


{
int i=0,j=0,tmp;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j]<a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
}
int main() {
int n,i,j,m,o;
int a[100][100],b[100],c[100][100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]);
for(j=0;j<m;j++)
{
for(i=0;i<n;i++) b[i]=a[i][j];
BSD(b,m);
for(i=0;i<n;i++) c[i][j]=b[i];
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) printf("%d ",c[i][j]);
printf("\n");
}
return 0;
}

5
5. Insertion Sort Crescator pe linii:

#include <stdlib.h>
#include <stdio.h>

void ISC(int a[], int n)


{
for(int i=1;i<n;i++)
{
int tmp=a[i];
int j=i-1;
while(tmp<a[j] && j>=0)
{
a[j+1]=a[j];
--j;
}
a[j+1]=tmp;
}
}

int main() {
int n,i,j,m;
int a[100][100],b[100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) b[j]=a[i][j];
ISC(b,m);
for(j=0;j<m;j++) printf("%d ", b[j]);
printf("\n");
}

return 0;
}

6
6. Insertion Sort Descrescator pe linii:

#include <stdlib.h>
#include <stdio.h>

void IS(int a[], int n)


{
for(int i=1;i<n;i++)
{
int tmp=a[i];
int j=i-1;
while(tmp>a[j] && j>=0)
{
a[j+1]=a[j];
--j;
}
a[j+1]=tmp;
}
}

int main() {
int n,i,j,m;
int a[100][100],b[100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) b[j]=a[i][j];
ISD(b,m);
for(j=0;j<m;j++) printf("%d ", b[j]);
printf("\n");
}

return 0;
}

7
7. Insertion Sort Crescator pe coloane:

#include <stdlib.h>
#include <stdio.h>

void IS(int a[], int n)


{
for(int i=1;i<n;i++)
{
int tmp=a[i];
int j=i-1;
while(tmp<a[j] && j>=0)
{
a[j+1]=a[j];
--j;
}
a[j+1]=tmp;
}
}
int main() {
int n,i,j,m,o;
int a[100][100],b[100],c[100][100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]);
for(j=0;j<m;j++)
{
for(i=0;i<n;i++) b[i]=a[i][j];
IS(b,m);
for(i=0;i<n;i++) c[i][j]=b[i];
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) printf("%d ",c[i][j]);
printf("\n");
}
return 0;
}

8
8. Insertion Sort Descrescator pe coloane:

#include <stdlib.h>
#include <stdio.h>

void IS(int a[], int n)


{
for(int i=1;i<n;i++)
{
int tmp=a[i];
int j=i-1;
while(tmp>a[j] && j>=0)
{
a[j+1]=a[j];
--j;
}
a[j+1]=tmp;
}
}
int main() {
int n,i,j,m,o;
int a[100][100],b[100],c[100][100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]);
for(j=0;j<m;j++)
{
for(i=0;i<n;i++) b[i]=a[i][j];
IS(b,m);
for(i=0;i<n;i++) c[i][j]=b[i];
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) printf("%d ",c[i][j]);
printf("\n");
}
return 0;
}

9
9. Selection Sort Crescator pe linii:

#include <stdlib.h>
#include <stdio.h>

void swap(int *a, int *b)


{
int temp = *a;
*a = *b;
*b = temp;
}

void SS(int a[], int n)


{
for (int step = 0; step < n - 1; step++)
{
int min_idx = step;
for (int i = step + 1; i < n; i++) if (a[i] < a[min_idx]) min_idx = i;
swap(&a[min_idx], &a[step]);
}
}

int main() {
int n,i,j,m;
int a[100][100],b[100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) b[j]=a[i][j];
SS(b,m);
for(j=0;j<m;j++) printf("%d ", b[j]);
printf("\n");
}

return 0;
}

10
10. Selection Sort descrescator pe linii:

#include <stdlib.h>
#include <stdio.h>

void swap(int *a, int *b)


{
int temp = *a;
*a = *b;
*b = temp;
}

void SS(int a[], int n)


{
for (int step = 0; step < n - 1; step++)
{
int min_idx = step;
for (int i = step + 1; i < n; i++) if (a[i] > a[min_idx]) min_idx = i;
swap(&a[min_idx], &a[step]);
}
}

int main() {
int n,i,j,m;
int a[100][100],b[100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) b[j]=a[i][j];
SS(b,m);
for(j=0;j<m;j++) printf("%d ", b[j]);
printf("\n");
}

return 0;
}

11
11. Selection Sort Crescator pe coloane:

#include <stdlib.h>
#include <stdio.h>

void swap(int *a, int *b)


{
int temp = *a;
*a = *b;
*b = temp;
}

void SS(int a[], int n)


{
for (int step = 0; step < n - 1; step++)
{
int min_idx = step;
for (int i = step + 1; i < n; i++) if (a[i] < a[min_idx]) min_idx = i;
swap(&a[min_idx], &a[step]);
}
}

int main() {
int n,i,j,m,o;
int a[100][100],b[100],c[100][100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]);
for(j=0;j<m;j++)
{
for(i=0;i<n;i++) b[i]=a[i][j];
SS(b,m);
for(i=0;i<n;i++) c[i][j]=b[i];
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) printf("%d ",c[i][j]);
printf("\n");
}
return 0;

12
}

12. Selection Sort descrescator pe coloane:

#include <stdlib.h>
#include <stdio.h>

void swap(int *a, int *b)


{
int temp = *a;
*a = *b;
*b = temp;
}

void SS(int a[], int n)


{
for (int step = 0; step < n - 1; step++)
{
int min_idx = step;
for (int i = step + 1; i < n; i++) if (a[i] > a[min_idx]) min_idx = i;
swap(&a[min_idx], &a[step]);
}
}

int main() {
int n,i,j,m,o;
int a[100][100],b[100],c[100][100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]);
for(j=0;j<m;j++)
{
for(i=0;i<n;i++) b[i]=a[i][j];
SS(b,m);
for(i=0;i<n;i++) c[i][j]=b[i];
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++) printf("%d ",c[i][j]);
printf("\n");
13
}
return 0;
}

13.

#include <stdio.h>
#include <stdbool.h>
#include <limits.h>

int n,m,k=0;

void sort(int *c,int n)


{
bool temp=true;
int t;
while(temp)
{
temp=false;
for(int i=0;i<n-1;i++)
{
if(c[i]>c[i+1])
{
temp=true;
t=c[i];
c[i]=c[i+1];
c[i+1]=t;
}
}
}
}

int main ()

{
int cc;
scanf("%d %d", &n,&m);
int a[n][m],b[n][m],c[n*m];
14
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf("%d", &a[i][j]);
c[k++]=a[i][j];
}
}
printf("\n");
sort(c,n*m);
bool f1=true,f2=true,f3=true,f4=true;
k=0;
int i=0,j=0,maxH=n-1,minH=0,maxW=m-1,minW=0;
while(k<n*m)
{
b[i][j]=c[k++];
if(j==maxW && i>minH) i--;
else if(i==minH && j>minW) j--;
else if(j==minW && i<maxH) i++;
else if(i==maxH && j<maxW) j++;
if(i==maxH && j==maxW && f1) maxH--,f1=false,f2=true,f3=true,f4=true;
else if(j==maxW && i==minH && f2) maxW--,f2=false,f1=true,f3=true,f4=true;
else if(i==minH && j==minW && f3) minH++,f3=false,f1=true,f2=true,f4=true;
else if(j==minW && i==maxH && f4) minW++,f4=false,f1=true,f2=true,f3=true;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++) printf("%d ", b[i][j]);
printf("\n");
}
return 0;
}

14. Calculati suma tuturor elementelor unui tablou unidimensional utilizand metoda Divide et
Impera.

#include <stdio.h>
#include <stdbool.h>
#include <limits.h>

int sum(a,left,right)
{
15
int mid=(left+right)/2;
if(left>=right) return 0;
else return sum(a,left,mid-1)+a[mid]+sum(a,mid+1,right);
}

int main ()

{
int n;
scanf("%d", &n);
int a[105],left=0,right=n-1;
for(int i=0;i<n;i++) scanf("%d", &a[i]);
prinf("%d", sum(a,left,right));
return 0;
}

15.

#include <stdio.h>
#include <stdbool.h>
#include <limits.h>

void sort(int *c,int n)


{
bool temp=true;
int t;
while(temp)
{
temp=false;
for(int i=0;i<n-1;i++)
{
if(c[i]>c[i+1])
{
temp=true;
16
t=c[i];
c[i]=c[i+1];
c[i+1]=t;
}
}
}
}

bool isprime(p)
{
for(int j=2;j<p/2;j++)
{
if(p%j!=0) continue;
else return 1;
}
return 0;
}

int main ()

{
int n,p;
scanf("%d", &n);
int a[1001],b[500],c[500],py=0,pn=0,sum;
for(int i=0;i<n;i++) scanf("%d", &a[i]);
sort(a,n);
for(int i=0;i<n;i++)
{
if(isprime(a[i])==1) b[py]=a[i],py++;
else c[pn]=a[i],pn++;
}
for(int j=0;j<pn;j++) printf("%d ", c[j]);
for(int i=py-1;i>=0;i--) printf("%d ", b[i]);

return 0;
}

16.

#include <stdio.h>
#include <stdbool.h>
#include <limits.h>

void swap(int *a, int *b)


{
17
int t=*a;
*b=*a;
*a=t;
}
int sum(int n)
{
int temp;
while(n!=0)
{
temp+=(n%10);
n/=10;
}
return temp;
}

int main ()

{
int n,p;
scanf("%d", &n);
int a[1001],b[500],c[500],py=0,pn=0;
for(int i=0;i<n;i++) scanf("%d", &a[i]);
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(sum(a[i])%2==0 && sum(a[j])%2==0 && a[i]<a[j]) swap(a[i],a[j]);
if(sum(a[i])%2==0 && sum(a[j])%2==0 && a[i]>a[j]) swap(a[i],a[j]);
}
}
for(int i=0;i<n;i++) printf("%d", a[i]);
return 0;
}

18

You might also like