Sunteți pe pagina 1din 11

1.

/* HeapSMax.c - Ord. descresc., prin selectie Heapsort: construim Heap-ul, arborele de selectie, memorat intr-un vector, dupa care se interschmba prima valoare (maximul) cu ultima si in vectorul ramas (n-1) se construieste din nou Heap-ul, s.a.m.d.

*/ #include<stdio.h> #include <conio.h> void cerne (double a[], int l, int r) { int i,j; double x; i=l; j=2*i; x=a[i]; /* x ce se cerne prin arbore/ vector */ while (j<=r){ if (j<r) /* nu s-a ajuns la capat */ if (a[j]<a[j+1]) /* j-ind. val. mai mare din */ j++; /* perechea (2*i, 2*i + 1) */ if (x>a[j]) /* daca x > valoarea respectiva (j) */ goto gata; /* altfel, se muta */ a[i]=a[j]; /* valoarea mai mare a[j] la a[i], si se */ i=j; j=2*i; /* continua cernerea pe nivelul urmator */ } /* noul i devine j (vechi i), iar j=2i, daca j<r */ gata: a[i]=x; /* pune x in poz. i, a[i]<a[2i], a[i]<a[2i+1] */ } void heapsort(double a[], int n){ int i, l, r; double x; l=(n/2)+1; r=n; while (l>1){ l--; cerne(a,l,r); for( i = 1 ; i <= n ; ++i ){ printf (" %0.lf ", a[i]); if (i%10==0) printf("\n"); } printf("\nApasa o tasta pentru continuare program!\n"); getch(); } while(r>1) {x=a[1]; a[1]=a[r]; a[r]=x; r--; cerne(a,l,r); for( i = 1 ; i <= n ; ++i ){ printf (" %0.lf ", a[i]); if (i%10==0) printf("\n"); } printf("\nApasa o tasta pentru continuare program!\n"); getch(); } } void main(void) { double sir[1000]; int ne, i; clrscr(); printf("HeapSort pentru ordonare crescatoare vector.\n"); printf ("Numarul de elemente: "); scanf ("%d",&ne); for ( i = 1 ; i <= ne ; ++i) { printf (" sir(%d)=", i); scanf ("%lf", &sir[i]); } heapsort(sir,ne); for( i = 1 ; i <= ne ; ++i ){ printf (" %0.lf ", sir[i]); if (i%10==0) printf("\n"); } printf("\nPROGRAM TERMINAT! Apasa o tasta-iesire!!!\n"); getch();

2.

/* HeapSmin.c - Ord. descresc., prin selectie Heapsort: construim Heap-ul, arborele de selectie, memorat intr-un vector, dupa care se interschmba prima valoare (minimul) cu ultima si in vectorul ramas (n-1) se construieste din nou Heap-ul, s.a.m.d.

*/ #include<stdio.h> #include <conio.h> void cerne (double a[], int l, int r) { int i,j; double x; i=l; j=2*i; x=a[i]; /* x ce se cerne prin arbore/ vector */ while (j<=r){ if (j<r) /* nu s-a ajuns la capat */ if (a[j]>a[j+1]) /* j-ind. val. mai mica din */ j++; /* perechea (2*i, 2*i + 1) */ if (x<a[j]) /* daca x < valoarea respectiva (j) */ goto gata; /* altfel, se muta */ a[i]=a[j]; /* valoarea mai mica a[j] la a[i], si se */ i=j; j=2*i; /* continua cernerea pe nivelul urmator */ } /* noul i devine j (vechi i), iar j=2i, daca j<r */ gata: a[i]=x; /* pune x in poz. i, a[i]<a[2i], a[i]<a[2i+1] */ } void heapsort(double a[], int n){ int i, l, r; double x; l=(n/2)+1; r=n; while (l>1){ l--; cerne(a,l,r); for( i = 1 ; i <= n ; ++i ){ printf (" %0.lf ", a[i]); if (i%10==0) printf("\n"); } printf("\nApasa o tasta pentru continuare program!\n"); getch(); } while(r>1) {x=a[1]; a[1]=a[r]; a[r]=x; r--; cerne(a,l,r); for( i = 1 ; i <= n ; ++i ){ printf (" %0.lf ", a[i]); if (i%10==0) printf("\n"); } printf("\nApasa o tasta pentru continuare program!\n"); getch(); } } void main(void) { double sir[1000]; int ne, i; clrscr(); printf ("Numarul de elemente: "); scanf ("%d",&ne); for ( i = 1 ; i <= ne ; ++i) { printf (" sir(%d)=", i); scanf ("%lf", &sir[i]); } heapsort(sir,ne); for( i = 1 ; i <= ne ; ++i ){ printf (" %0.lf ", sir[i]); if (i%10==0)

printf("\n"); } printf("\nPROGRAM TERMINAT! Apasa o tasta-iesire!!!\n"); getch(); }

3.

/* ins_bin.c - prog. de ordonare cresc. sir, utilizand metoda de inserare binara, adica: se considera un sir ordonat, format initial din primul element din sirul initial, si un sir neordonat, format din restul elementelor sirului, din care se iau pe rand celelalte elemente si li se cauta, de la dreapta la stanga, pozitia in sirul ordonat, construit tot in sirul initial. Cautarea se face utilizand metoda "binara". */ #include<stdio.h> #include <conio.h> int ncomp=0, nins=0; /* numar de comparatii si inserari/deplasari */ /* functia de sortare prin inserare binara */ void sort_ins_binara ( double a[], int n ) { double x; int i, j, s, d, m; for (i=1; i<n; ++i) { x=a[i]; s=0; d=i-1;/* initializari: x-elementul de inserat */ while (s <= d) /* s, d-limitele stanga/dreapta pentru subsir dest */ {ncomp++; m=(s+d)/2; /* mijlocul subsirului */ if (x < a[m]) /* in functie de apartenenta elementului x */ d=m-1; /* la subsirul din stanga sau dreapta */ else /* se stabileste noua limita din stanga/dreapta */ s=m+1; /* a noului subsir, in care se cauta */ } /* dupa determinarea pozitiei de inserare a elem.*/ for (j=i-1; j>=s; --j, nins++) /* se deplaseaza tot sirul cu */ a[j+1]=a[j]; /* o pozitie la dreapta, de la pozitia */ a[s]=x; /* de inserare pana la sfarsit, dupa care */ /* se insereaza noul element, x */ } } void main(void){ double sir[100]; int ne,i; clrscr(); printf("Numar elemente:"); scanf("%d", &ne); for(i=0; i<ne; i++) /* citire sir de ordonat */ { printf("sir(%d)= ", i+1); scanf("%lf", &sir[i]); } printf("Sirul ordonat este: \n"); sort_ins_binara(sir , ne); /* apelul functiei de sortare binara */ for (i=0;i<ne;i++) /* afisare sir ordonat */ { printf(" sir (%2d) = %lf \n", i+1, sir[i]); if ((ne+1)%4==0) /* tiparesc cate 4 valori pe linie */ printf("\n"); } printf("\n"); printf("Ordonarea s-a realizat prin %d comparatii si %d deplasari\n", ncomp, nins); } 4. /* ins_dir.c- prog. ordonare cresc. sir, utilizand metoda de inserare directa, adica: se considera un sir ordonat, format initial din primul element din sirul initial, si un sir neordonat, format din restul elementelor sirului, din care se iau pe rand celelalte elemente si li sa cauta, de la dreapta la stanga, pozitia in sirul ordonat, construit tot in sirul initial. */ #include <stdio.h> #include <conio.h> int ncomp=0, nins=0; /* numar de comparatii si inserari/ deplasari */ void sort_ins_direct (double a[], int n) {/* functia de sortare prin inserare directa */ double x;

int i, j; for (i=1; i<n; ++i) { x=a[i]; /* elementul curent de inserat */ j=i-1; /* dimensiunea sirului destinatie */ while (x < a[j] && j >= 0) { /* se cauta pozitia de inserare */ a[j+1]=a[j]; j--; ncomp++; nins++; } a[j+1]=x; /* inseare element curent */ } } void main() { double sir[100]; int ne, i; clrscr(); printf("Numar elemente:"); scanf("%d", &ne); for(i=0; i<ne; i++) /* citirea elementelor sirului de sortat */ { printf("sir(%d)= ", i+1); scanf("%lf", &sir[i]); } sort_ins_direct (sir, ne); /* ordonarea sirului prin inserare directa */ printf("\n Sirul ordonat:\n"); for(i=0; i<ne; i++) /* afisare sir ordonat */ { printf(" sir(%d)=%5.2lf ", i+1, sir[i]); if ( (i+1) %5 == 0 ) /* daca s-au afisat 5 valori din sir pe o linie */ printf("\n"); /* se trece pe o linie noua */ } printf("\n"); printf("Ordonarea s-a realizat prin %d comparatii si %d deplasari\n", ncomp, nins); } 5. /* MergeSor.c - Ordonare utilizand metoda MergeSort (interclasare) */ #include <stdio.h> #include <conio.h> #define DIM 20 void MergeSort (int v[], int p, int q){ int m, aux; void Interclasare(int [], int, int, int); if (q-p <= 1){ if (v[p]>v[q]){ aux=v[p]; v[p]=v[q]; v[q]=aux; } } else{ m=(p+q)/2; MergeSort(v, p, m); MergeSort(v, m+1, q); Interclasare(v, p, q, m); } } void Interclasare (int v[], int p, int q, int m){ int i=p, j=m+1, k=0; int *u=(int *) malloc (DIM * sizeof(int)); // alocare memorie pentru vect. u while (i<=m && j<=q){ if (v[i] <= v[j]){ u[k]=v[i]; i++; k++; } else{ u[k]=v[j]; j++; k++; } } if (i <= m)

for (j=i; j<=m; j++){ u[k]=v[j]; k++; } else for (i=j; i<=q; i++){ u[k]=v[i]; k++; } k=0; for (i=p; i<=q; i++){ v[i]=u[k]; k++; } free(u); // eliberarea spatiului alocat pentru vectorul u } void scrie_vector(int vect[], int d){ int i; for (i=0; i<d; i++) printf("%5d,", vect[i]); } void main() {int vector[]={10, 5, 6, 12, 3, 7, 15, 12, 9, 4, 3}; int ne=11; clrscr(); MergeSort(vector, 0, ne-1); scrie_vector(vector, ne); printf("\nApasati o tasta pentru a termina programul!\n"); getch(); } 6. /* QuickSit.c - sortarea unui vector utilizand algoritmul QuickSort, iterativ */ #include<stdio.h> #include<conio.h> #define DIM 100 typedef int VECTOR[DIM]; int ncomp=0, ninv=0; /* numar de comparatii, inversiuni */ void cit_vect(int n, VECTOR v) {int i; for(i=0; i<n; i++) {printf("v[%d]=", i+1); scanf("%d", &v[i]);} } void scrie_vect(int n, VECTOR v) {int i; for(i=0; i<n; i++) printf("v[%d]=%d\n", i+1, v[i]); } void QuickSortit (VECTOR a, int n)/* Sortara partajata (QuickSort) realizata iterativ */ {int s, d, i, j, is, x, t; struct st_stiva {int s, d;}; /* element stiva: pozitia stanga, dreapta */ struct st_stiva stiva[DIM]; /* stiva ce contine lista de cereri partitie */ is=1; stiva[is].s=0; stiva[is].d=n-1; d=n-1; /* initializari */ do{ s=stiva[is].s; d=stiva[is].d; is--; /* partitia curenta de realizat*/ do {i=s; j=d; /* este luata din varful stivei */ x=a[(s+d)/2]; /* santinela */ do { while (a[i]<x) i++, ncomp++; while (a[j]>x) j--, ncomp++; if (i<=j) {t=a[i]; a[i]=a[j]; a[j]=t; i++; j--; ninv++; } } while(i<=j); if (i<d){ /* depun in stiva cererea de a sorta */ is++; /* partitia dreapta */ stiva[is].s=i; stiva[is].d=d;

} d=j; /* se continua sortarea partitiei stanga, (s, d) */ } while (s<d); /* pana are un singur element (s==d) */ }while (is>0); /* se reia sortarea pentru partitiile stanga */ /* ramase nerezolvate, in stiva */

void main(void) {int n; VECTOR v; clrscr(); printf("Programul ordoneaza (sorteaza) un vector cu alg. QuickSort.\n"); printf("Dimensiune vector, n=");scanf("%d", &n); cit_vect(n, v); QuickSortit (v, n); printf("\nVectorul ordonat este:\n"); scrie_vect(n, v); printf("Sortarea s-a realizat dupa %d comparatii si %d inversiuni\n", ncomp, ninv); getch(); } 7. /* QuickSor.c - sortarea unui vector utilizand algoritmul QuickSort */ #include<stdio.h> #include<conio.h> #define DIM 100 typedef int VECTOR[DIM]; int ncomp=0, ninv=0; /* numar de comparatii, inversiuni */ void cit_vect(int n, VECTOR v) {int i; for(i=0; i<n; i++) {printf("v[%d]=", i+1); scanf("%d", &v[i]);} } void scrie_vect(int n, VECTOR v) {int i; for(i=0; i<n; i++) printf("v[%d]=%d\n", i+1, v[i]); } void QuickSort(VECTOR a, int s, int d) {int i, j, m, x, temp; i=s; j=d; m=(s+d)/2; x=a[m]; do {while (a[i]<x) i++, ncomp++; while (a[j]>x) j--, ncomp++; if (i<=j) {temp=a[i]; a[i]=a[j]; a[j]=temp; i++; j--; ninv++; } }while(i<=j); if(s < j) QuickSort(a, s, j); if(i < d) QuickSort(a, i, d); } void main(void) {int n; VECTOR v; clrscr(); printf("Programul ordoneaza (sorteaza) un vector cu alg. QuickSort.\n"); printf("Dimensiune vector, n=");scanf("%d", &n); cit_vect(n, v); QuickSort(v, 0, n-1); printf("\nVectorul ordonat este:\n"); scrie_vect(n, v); printf("Sortarea s-a realizat dupa %d comparatii si %d inversiuni\n", ncomp, ninv); getch(); }

8. /* QuickSor.cpp - sortarea unui vector utilizand algoritmul QuickSort */ #include<stdio.h> #include<conio.h> typedef int vector[30]; void cit_vect(int n,vector v) {int i; for(i=0;i<n;i++) {printf("v[%d]=",i); scanf("%d",&v[i]);} } void scrie_vect(int n,vector v) {int i; for(i=0;i<n;i++) printf("v[%d]=%d\n",i,v[i]); } void quicksort(vector a, int s, int d) {int i, j, m, x, temp; i=s; j=d; m=(s+d)/2; x=a[m]; do {while (a[i]<x) i++; while (a[j]>x) j--; if (i<=j) {temp=a[i]; a[i]=a[j]; a[j]=temp; i++; j--; } }while(i<=j); if(s<j) quicksort(a,s,j); if(i<d) quicksort(a,i,d); } main() {int n; vector v; clrscr(); printf("Programul ordoneaza (sorteaza) un vector cu alg. QuickSort.\n"); printf("Dimensiune vector, n=");scanf("%d",&n); cit_vect(n,v); quicksort(v,0,n-1); printf("\nVectorul ordonat este:\n"); scrie_vect(n,v); getch(); } 9. /* sel_dir.c - programul ordoneaza un vector prin selectie directa, utilizand pentru aceasta determinarea minimului si a pozitiei lui, la fiecare iteratie si realizand o singura inversiune intre acest minim si valoarea a[i], corespunzatoare iteratiei curente; se determina si numarul de comparatii si inversiuni realizate */ #include<stdio.h> #include <conio.h> int ncomp=0, ninv=0; /* numar de comparatii si inversiuni */ void sort_sel_direct ( double a[], int n ) /* functia sorteaza un vector prin metoda de selectie directa */ { double x; int i, j, k; for ( i = 0 ; i < n-1 ; ++i ) { k = i; /* initializare indice, k, si elementul minim, x */ x = a[i]; for ( j = i+1 ; j < n ; ++j, ncomp++ ) /* determinare minim si indicele lui din sir */ if (a[j] < x) { k = j; x = a[k]; } a[k] = a[i]; /* interschimbare minim cu primul din subsirul sursa, */ a[i] = x; /* adica cu primul din subsirul neordonat */ ninv++;

} } void main() { double sir[100]; int ne,i, nl=0; clrscr(); printf("Numar elemente:"); scanf("%d",&ne); for(i=0;i<ne;i++) /* citirea elementelor sirului de ordonat */ { printf("sir(%d)=",i+1); scanf("%lf",& sir[i]); } sort_sel_direct(sir,ne); /* ordonarea sirului prin selectie directa */ for(i=0;i<ne;i++) /* afisarea sirului ordonat */ { printf(" sir(%2d)=%5.1lf",i+1,sir[i]); nl++; /* actualizare contor numar de valori afisate pe o linie */ if ( nl % 5 == 0 ) /* daca s-au afisat 5 valori pe o linie se trece pe */ printf("\n"); /* o linie noua */ } printf("\n"); printf("Ordonarea s-a realizat prin %d comparatii si %d inversiuni\n", ncomp, ninv); } 10. /* sel_dirv.c - Program de ordonare crescatoare sir, utilizand metoda de selectie directa, adica: din sirul initial se pune valoarea minima pe prima pozitie, apoi pentru subsirul ramas, [2,n], se pune valoarea minima pe pozitia 2, s.a.m.d, prin interschimbari multiple; pentru fiecare valoare, sir[i], ori de cate ori se determina o valoare sir[j]<sir[i], se inverseaza cele doua valori (se determina si numarul de comparatii si inversiuni realizate pentru ordonare) */ #include<stdio.h> #include <conio.h> int ncomp=0, ninv=0; /* numar de comparatii, inversiuni */ void sort_sel_dir (double sir[], int nrelem) { /* selectie directa prin interschimbari, pentru fiecare valoare mai mica decat iteratia curenta, i, sir[i]. */ int i, j; double aux; for( i = 0; i < nrelem-1; ++i) for( j = i+1; j < nrelem ; ++j, ncomp++){ if ( sir[i] > sir[j] ) { aux = sir[i]; sir[i] = sir[j]; sir[j] = aux; ninv++; } } } void main(void) { double sir[1000]; int ne, i; clrscr(); printf ("Numarul de elemente: "); scanf ("%d",&ne); for ( i = 0 ; i < ne ; ++i) { printf (" sir(%2d)=", i+1); scanf ("%lf", &sir[i]); } sort_sel_dir(sir,ne); for( i = 0 ; i < ne ; ++i ){ printf (" sir(%2d)=%5.2lf ", i+1, sir[i]); if ((i+1)%4==0) printf("\n");} printf("\n"); printf("Ordonarea s-a realizat prin %d comparatii si %d inversiuni\n", ncomp, ninv);} 11. /* shaker.cpp - ordonare (sortare) vector utilizand metoda "ShakerSort" */

#include<stdio.h> #include<conio.h> typedef int VECTOR[30]; int ncomp=0, ninv=0; /* numar de comparatii si inversiuni/ deplasari */ void cit_vect(int n, VECTOR v) {int i; for(i=0; i<n; i++) {printf("v[%d]=", i+1); scanf("%d", &v[i]);} } void scrie_vect(int n, VECTOR v) {int i; for(i=0; i<n; i++) printf("v[%d]=%d\n", i+1, v[i]); } void shaker(int n, VECTOR v) {int t, i, k, s, d; d=n-2; s=0; k=d; /* initializari pentru limita din stanga (s), dreapta (d) */ do /* iar k reprezinta pozitia la care s-a realizat ultima inversiune */ /* ncomp, ninv - numar de comparatii, inversiuni realizate */ {for (i=s; i<=d; i++, ncomp++) /* parcurg de la stanga la dreapta */ if (v[i] > v[i+1]) /* daca este cazul se inverseaza */ {t=v[i]; v[i]=v[i+1]; v[i+1]=t; k=i; /* se retine pozitia ultimei inversiuni */ ninv++;} d=k-1; /* se modifica corespunzator limita din dreapta */ for (i=d; i>=s; i--, ncomp++) /* parcurg de la dreapta la stanga */ if (v[i+1] < v[i]) /* daca este cazul se invers. elem. */ {t=v[i]; v[i]=v[i+1]; v[i+1]=t; k=i; /* se retine pozitia ultimei inversiuni */ ninv++;} s=k+1; /* se modifica corespunzator limita din stanga */ }while(s <= d); } void main(void) {int n; VECTOR v; clrscr(); printf("\nProgramul ordoneaza (sorteaza) un vector, metoda \"Shaker\".\n"); printf("\tDimensiune vector, n= ");scanf("%d",&n); cit_vect(n,v); shaker(n,v); printf("\nSirul ordonat este:\n"); scrie_vect(n,v); printf("Ordonarea s-a realizat prin %d comparatii si %d deplasari\n", ncomp, ninv); printf("\n\tApasati o tasta pentru a termina programul\n"); getch(); } 12. /* sortbule.c - programul ordoneaza un sir de valori prin metoda inversiunilor (bulelor) - forma clasica */ #include <stdio.h> #include <conio.h> int ncomp=0, ninv=0; /* numar de comparatii si inversiuni/ deplasari */ void sort_met_bulelor (double a[], int n) /* functia sorteaza un vector prin metoda inversiunilor (bulelor) */ {double x; int i, j; for (i=1; i<n; i++) for (j=n-1; j>=i; j--, ncomp++) if (a[j-1] > a[j]) { x=a[j-1]; a[j-1]=a[j]; a[j]=x; ninv++; } }

void main(){ double sir[100]; int ne,i, nl=0; clrscr(); printf("Numar elemente:"); scanf("%d", &ne); for(i=0; i<ne; i++) /* citirea elementelor sirului de ordonat */ {printf("sir(%d)=",i+1); scanf("%lf", &sir[i]); } sort_met_bulelor (sir, ne); /* ordonarea sirului prin selectie directa */ for(i=0; i<ne; i++) /* afisarea sirului ordonat */ { printf("sir(%2d)=%5.1lf ", i+1, sir[i]); nl++; /* actualizare contor numar de valori afisate pe o linie */ if (nl % 5 == 0) /* daca s-au afisat 5 valori pe o linie */ printf("\n"); /* se trece pe o linie noua */ } printf("\n"); printf("Ordonarea s-a realizat prin %d comparatii si %d deplasari\n", ncomp, ninv); } 13. /* sortindx.c - se sorteaza indecsii unui tablou de tip structura, care contine date pentru un numar de studenti (nume, prenume si media) asociat acestui tablou definim un tablou cu indecsii tabloului de studenti; vom sorta studentii dupa medii prin intermediul tabloului de indecsi, iar sortarea indicilor se va face utiliznd algoritmul ShakerSort */ #include <stdio.h> #define DIM 100 #include <conio.h> struct tip_struct { char nume_prenum [DIM];/* numele si prenumele unui student*/ float medie; }; void main(void) { struct tip_struct stud [100];/* consideram un tablou de studenti */ int ind[100]; /* vectorul ce contine indecsii tabloului initial, si ce va fi ordonat in functie de valorile vectorului de ordonat "tab" */ int i, ns; float f; void ShakerSort (struct tip_struct tab[], int index[], int n); clrscr(); printf("Numarul de studenti:"); scanf("%d", &ns); f=0.0; fflush(stdin); for (i=0; i<ns; i++) /* citire date studenti: nume, prenume si media */ { printf("Numele si prenumele studentului %d: ", i+1); gets(stud[i].nume_prenum); printf("Media notelor sale: "); scanf("%f", &f); stud[i].medie=f; while (getchar() != '\n'); } for (i=0; i<ns; i++) /* initializarea tabloului de indici */ ind[i] = i; ShakerSort (stud, ind, ns); /* sortarea vectorului */ printf("Lista ordonata cu numele / prenumele si media studentilor\n"); for (i=0; i<ns; i++) printf("%s %.2f\n", stud[ind[i]].nume_prenum, stud[ind[i]].medie); } void ShakerSort (struct tip_struct tab[], int index[], int n) { int i, s, d, k, t; d=n-2; s=0; k=d; do { for (i=s; i<=d; i++) if (tab[index[i]].medie < tab[index[i+1]].medie) {

t=index[i]; index[i]=index[i+1]; index[i+1]=t; k=i; } d=k-1; for (i=d; i>=s; i--) if (tab[index[i+1]].medie > tab[index[i]].medie) { t=index[i]; index[i]=index[i+1]; index[i+1]=t; k=i; } s=k+1; } while (s <= d); } 14. /* SortShel .c - programul ordoneaza un vector cu metoda Shell */ #include <stdio.h> #include <conio.h> #define N_MAX 100 typedef double VECTOR [N_MAX]; int ncomp=0, ninv=0; /* numar de comparatii, inversiuni */ void Sort_Shell (VECTOR v, int dim){ int i, pas, inv; double a; pas = dim; while (pas >1 ) { pas=pas/2 ; do { inv=0 ; /* fals */ for (i=0; i < dim-pas; i++) {ncomp++; if (v[i] > v[i+pas]) { a=v[i+pas]; v[i+pas]=v[i]; v[i]=a; inv=1; ninv++; } } } while (inv); } } void main (void) { VECTOR sir, a; int n, i, j , inv ; clrscr(); printf ("Numarul de elemente ale sirului (<=100): " ) ; scanf ("%d", &n) ; for (i=0; i<n; ++i) { printf ("sir[%2d]= ", i+1); scanf ("%lf", &sir[i]) ; } Sort_Shell(sir, n); printf("\nVectorul ordonat este:\n"); for (i=0; i<n; ++i){ printf ("sir[%2d]=%5.2lf ", i+1, sir[i]); if ((i+1)%4==0) printf("\n"); } printf("\nSortarea s-a realizat dupa %d comparatii si %d inversiuni\n", ncomp, ninv); getch(); }

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