sortarea prin selectie si insertie

Page 1

1. 2.

Sortarea prin selecĹŁie Sortarea prin inserĹŁie


De fapt denumirea exactă este sortarea prin selectarea minimului (sau după caz prin selectarea maximului)

Algoritm – Sortarea prin selectarea minimului

Ideea algoritmului este destul de simplă. Tabloul unidimensional este impărţit în două părţi imaginare - o parte sortată şi o parte nesortată. La început, partea sortată este goală, în timp ce partea nesortată conţine întreg tabloul. La fiecare pas, algoritmul găseşte elementul minim din partea nesortată şi îl adaugă la finalul parţii sortate. Când partea nesortată rămâne goală, algoritmul se opreşte. Când algoritmul sortează un tablou unidimensional, interschimbă primul element al părţii nesortate cu elementul minim şi după aceea el este inclus în partea sortată.


Exemplu:

Să sortăm {5, 1, 12, -5, 16, 2, 12, 14} utilizând sortarea prin selectarea minimului. v

0

1

2

3

4

5

6

7

5

1

12

-5

16

2

12

14

nesortat

Se caută cel mai mic dintre elementele tabloului şi se interschimbă cu elementul de pe prima poziţie.

v

0

1

2

3

4

5

6

7

5

1

12

-5

16

2

12

14


v

0

1

2

3

4

5

6

7

-5

1

12

5

16

2

12

14

Se caută minimul dintre elementele ramase, adică { 1, 12, 5, 16, 2, 12, 14} şi se trece pe prima poziţie dintre elementele nesortate încă ( adică poziţia 1 )

v

0

1

2

3

4

5

6

7

-5

1

12

5

16

2

12

14

1 rămâne pe poziţie întrucât este minimul dintre cele rămase.

v

0

1

2

3

4

5

6

7

-5

1

12

5

16

2

12

14

Se caută minimul dintre elementele ramase, adică { 12, 5, 16, 2, 12, 14} şi se trece pe prima poziţie dintre elementele nesortate încă ( adică poziţia 2)


v

v

0

1

2

3

4

5

6

7

-5

1

12

5

16

2

12

14

0

1

2

3

4

5

6

7

-5

1

2

5

16

12

12

14

Se caută minimul dintre elementele ramase, adică { 5, 16,1 2, 12, 14} şi se trece pe prima poziţie dintre elementele nesortate încă ( adică poziţia 3)

v

0

1

2

3

4

5

6

7

-5

1

2

5

16

12

12

14

5 rămâne pe poziţie întrucât este minimul dintre cele rămase.


v

0

1

2

3

4

5

6

7

-5

1

2

5

16

12

12

14

Se caută minimul dintre elementele ramase, adică { 16,1 2, 12, 14} şi se trece pe prima poziţie dintre elementele nesortate încă ( adică poziţia 4)

v

v

0

1

2

3

4

5

6

7

-5

1

2

5

16

12

12

14

0

1

2

3

4

5

6

7

-5

1

2

5

12

14

12 16


Se caută minimul dintre elementele ramase, adică { 16, 12, 14} şi se trece pe prima poziţie dintre elementele nesortate încă ( adică poziţia 5)

v

v

0

1

2

3

-5

1

2

5

0

1

2

3

-5

1

2

5

4

5

6

7

12 16 12 14

4

5

6

7

12 12 16 14

Se caută minimul dintre elementele ramase, adică { 16, 14} şi se trece pe prima poziţie dintre elementele nesortate încă ( adică poziţia 6)

v

0

1

2

3

-5

1

2

5

4

5

6

7

12 12 16 14


v

0

1

2

3

-5

1

2

5

4

5

6

7

12 12 14 16

Partea nesortată este goală, deci algoritmul s-a încheiat şi tabloul v este sortat crescător. Programul în C++ #include <iostream.h> #include <conio.h> int n, i, j, v[100], indice_minim, tmp; void main(){ clrscr(); cout<<“n=”; cin>>n; for(i=0; i<n; i++){ cout<<“v[”<<i<<“]=”; cin>>v[i]; } for(i=0;i<n-1;i++){ indice_minim = i; for(j=i+1; j<n;j++) if(v[j] < v[ind_minim]) indice_minim = j ; tmp = v[i]; v[i] = v[indice_minim] ; v[indice_minim] = tmp ; }

}

cout<<“v={ ”<<v[0]; for(i=1; i<n; i++) cout<<“, ”<<v[i]; cout<<“ }”; getch();


Temă Să se modifice programul de mai sus a. î. tabloul să fie ordonat descrescător. Ce se observă ?


Algoritm Sortarea prin inserţie seamănă oarecum cu sortarea prin selecţie. Tabloul este impărţit imaginar în două părţi - o parte sortată si o parte nesortată. La început, partea sortată conţine primul element al tabloului şi partea nesortată conţine restul tabloului. La fiecare pas, algoritmul ia primul element din partea nesortată şi îl inserează în locul potrivit al parţii sortate. Când partea nesortată nu mai are nici un element, algoritmul se opreşte.

Exemplu: Să sortăm {5, 1, 12, -5, 16, 2, 12, 14} folosind sortarea prin inserţie.

v

0

1

2

3

4

5

6

7

5

1

12

-5

16

2

12

14

nesortat


Valoarea de pe prima poziţie (indice 0) rămâne pe loc.

v

0

1

2

3

4

5

6

7

5

1

12

-5

16

2

12

14

Se inserează prima valoare aflată după zona considerată sortată (zona galbenă) , această valoare este 1 care se află pe poziţia 1. 1<5 se interschimbă.

v

v

0

1

2

3

4

5

6

7

5

1

12

-5

16

2

12

14

0

1

2

3

4

5

6

7

1

5

12

-5

16

2

12

14

Se inserează prima valoare aflată după zona sortată (zona galbenă) , această valoare este 12, se află pe poziţia 2. 12>5 rămâne pe loc. v

0

1

2

3

4

5

6

7

1

5

12

-5

16

2

12

14


Se inserează prima valoare aflată după zona sortată (zona galbenă) , această valoare este -5, se află pe poziţia 3. -5 <12 se interschimbă.

v

v

0

1

2

3

4

5

6

7

1

5

12

-5

16

2

12

14

0

1

2

3

4

5

6

7

1

5

-5

2

12

14

5

6

7

2

12

14

12 16

-5 < 5, se interschimbă

v

0

1

2

1

5

-5

3

4

12 16


v

0

1

2

1

-5

5

3

4

12 16

5

6

7

2

12

14

5

6

7

2

12

14

5

6

7

2

12

14

-5<1, se interschimbă

v

v

0

1

2

1

-5

5

0

1

2

-5

1

5

3

4

12 16

3

4

12 16

Se inserează prima valoare aflată după zona sortată (zona galbenă) , această valoare este 16, se află pe poziţia 4. 16>12 rămâne pe loc.


v

0

1

2

-5

1

5

3

4

12 16

5

6

7

2

12

14

Se inserează prima valoare aflată după zona sortată (zona galbenă) , această valoare este 2, se află pe poziţia 5. 2<16, se interschimbă.

v

v

0

1

2

-5

1

5

0

1

2

3

4

-5

1

5

12

2

2<12, se interschimbă.

3

4

12 16

5

6

7

2

12

14

5

6

7

16 12

14


v

v

0

1

2

3

4

-5

1

5

12

2

0

1

2

3

4

-5

1

5

2

5

6

16 12

5

6

12 16 12

7

14

7

14

2<5, se interschimbă.

v

0

1

2

3

-5

1

5

2

4

5

6

12 16 12

7

14


v

0

1

2

3

-5

1

2

5

4

5

6

12 16 12

7

14

2 > 1, rămâne pe loc.

v

0

1

2

3

-5

1

2

5

4

5

6

12 16 12

7

14

Se inserează prima valoare aflată după zona sortată (zona galbenă) , această valoare este 12, se află pe poziţia 6. 12 < 16, se interschimbă.

v

0

1

2

3

-5

1

2

5

4

5

6

7

12 16 12 14


v

0

1

2

3

-5

1

2

5

4

5

6

7

12 12 16 14

12 == 12, rămâne pe loc. v

0

1

2

3

-5

1

2

5

4

5

6

7

12 12 16 14

Se inserează prima valoare aflată după zona sortată (zona galbenă) , această valoare este 14, se află pe poziţia 7. 14 < 16, se interschimbă.

v

v

0

1

2

3

-5

1

2

5

0

1

2

3

-5

1

2

5

4

5

6

7

12 12 16 14

4

5

6

7

12 12 14 16


14 > 12, rămâne pe loc.

v

0

1

2

3

-5

1

2

5

4

5

6

7

12 12 14 16

Algoritmul se opreşte întrucât nu mai sunt elemente de inserat. Tema: 1. Să se scrie un program care citeşte elementele unui tablou unidimensional (vector) de maxim 50 de elemente de tip întreg. Să se ordoneze crescător utilizând sortarea prin inserţie şi apoi să se afişeze elementele vectorului. 2. Să se scrie un program modificând programul anterior astfel încât ordonarea să se facă descrescător.


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.