You are on page 1of 5

#ifdef _MSC_VER

#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NONSTDC_NO_DEPRECATE
#endif
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
int v[20],n;
FILE *f;
void citire()
{
n=0;
f=fopen("pr.txt","rt");
do
{
fscanf (f,"%d",&v[n]);
n++;
}while (!feof(f));
fclose(f);
}
void afisare()
{
int i;
printf("\nSirul este: \n");
for (i=0;i<n;i++)
printf("%d\t", v[i]);
}
void selectie()
{
int i,j,aux,pozmin,min;
for(i = 0;i < n-1; i++)
{
pozmin=i;
min = v[i];
for(j= i+1; j < n; j++)
{
if(v[j] < min)
{min=v[j];
pozmin=j;
}
}
aux= v[i];
v[i]= min;
v[pozmin]= aux;
}
}
void selectie_performanta(void)
{

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

}
void insertie(void)
{
int i,j,aux,k;
for(i=0;i<n;i++)
{
aux=v[i];
j=i-1;
while(j>=0 && v[j]>aux)
{
v[j+1]=v[j];
j=j-1;
}
v[j+1]=aux;
}
}
void insertie_binara(void)
{ int i,j,s,d,m,aux;
for (i=0;i<n;i++)
{
aux=v[i];
s=0; d=i-1;
while(s<=d)
{
m=(s+d)/2;
if (v[m]>aux)
d=m-1;
else
s=m+1;
}
for(j=i-1; j>=s; j--)
{v[j+1]=v[j];

v[s]=aux;
}
}
void shakersort()
{
int i,j,k,st,dr;
int aux;
st=1;
dr=n-1;
k=n-1;
do
{ for(j=dr;j>=st;j--)
{
if(v[j-1] >v[j])
{ aux=v[j-1];
v[j-1]=v[j];
v[j]=aux;
k=j;
}
}
st=k+1;
for(j=st;j<=dr;j++)
{
if(v[j-1]>v[j])
{
aux=v[j-1];
v[j-1]=v[j];
v[j]=aux;
k=j;
}
}
dr=k-1;
}
while(st<=dr);
}
int Radix_interschimbare(int s, int d, int b)
{
int i,j,aux;
if ((d>s) && (b>=0)){
i=s; j=d;} ;
do
{
while ((((v[s] >> b) & 1)==0) && (s<=d)) s++;
while (((v[d] >> b) & 1) && (s>=d)) d--;
if (s<d)
{
aux=v[s];
v[s]=v[d];
v[d]=aux;
}
}
while (s<d);
Radix_interschimbare(i,s-1,b-1);
Radix_interschimbare(d+1,j,b-1);
return 0;

}
void shellsort()
{
int inj, gata, aux;
register int i;
inj = DIM;
while(inj > 1)
{
inj /= 2;
do
{
gata = 1;
for( i = 0; i <= DIM-inj; i++)
if( a[i] > a[i+inj])
{
aux = a[i];
a[i] = a[i+inj];
a[i+inj] = aux;
gata = 0;
}
}while(!gata);
}
}
void quicksort(int st, int dr)
{
int i,j,m,aux;
i=st; j=dr; m=(st+dr)/2;
do{
while(i<=dr && v[i]<v[m]){
i++;}
while(j>=st && v[j]>v[m]){
j--;}
if (i<=j) //parcurgerile nu s-au intersectat
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
i++;j--; //avansare in ambele directii
}
}
while(i<=j);
//sortare din stanga
if (st<j){
quicksort(st,j);}
//sortare din dreapta
if(dr>i){
quicksort(i,dr);}
}
void main()
{ int st, dr;
int opt;

do
{
printf("\n-------Meniu-------\n");
printf("1.Citire fisier!\n");
printf("2.Afisare!\n");
printf("3.Sortare prin insertie!\n");
printf("4.Sortare prin selectie!\n");
printf("5.Afisare prin selectie performanta\n");
printf("6. Afisare prin insertie binara:\n");
printf("7.Afisare quicksort\n");
printf("8.Afisare shakersort\n");
printf("9.Afisare Radix_interschimbare\n");
printf("0.Iesire!\n");
printf("Optiunea dorita este? \n");
scanf("%d", &opt);
switch(opt)
{
case 1: citire();
break;
case 2: afisare();
break;
case 3: insertie();
break;
case 4: selectie();
break;
case 5:selectie_performanta();
break;
case 6: insertie_binara();
break;
case 7: quicksort(0,n-1);
break;
case 8: shakersort();
break;
case 9: Radix_interschimbare(0,n-1,15);
break;
case 0:
break;
default: printf("Optiunea introdusa nu este valida!\n");
}
}while (opt!=0);
_getch();
}

You might also like