Selection-Sort Insertion-Sort Bubble-Sort. Selection-Sort

Preview:

Citation preview

• Selection-Sort

• Insertion-Sort

• Bubble-Sort

Selection-Sort

Selection-Sort-Beschreibung

Suche das kleinste Element aus der unsortierten Liste und tausche es mit dem Element an der nullten Position.Nun besteht die Liste aus einem sortierten Teil an der nullten Position und einem unsortierten Teil an den anderen Positionen.

Suche nun stets das kleinste Element aus der unsortierten Teilliste und tausche es mit dem nullten Element der unsortierten Teilliste. Die sortierte Teilliste ist damit um ein Element gewachsen.Wiederhole diesen Vorgang (n-1) mal.

23 6 1 7 4

Selection-Sort

j = 0

23 6 1 7 4

Selection-Sort

min = 0

j = 0

23 6 1 7 4

Selection-Sort

i = 1

min = 0

j = 0

23 6 1 7 4

Selection-Sort

i = 1

min = 1

j = 0

23 6 1 7 4

Selection-Sort

i = 2

min = 1

j = 0

23 6 1 7 4

Selection-Sort

i = 3

min = 1

j = 0

23 6 1 7 4

Selection-Sort

i = 3

min = 3

j = 0

23 6 1 7 4

Selection-Sort

i = 4

min = 3

j = 0

23 6 1 7 4

Selection-Sort

i = 5

min = 3

j = 0

23 6 1 7 4

Selection-Sort

i = 5

tausche (a[j], a[min])

min = 3

j = 0

21 6 3 7 4

Selection-Sort

sortiert

j = 0

21 6 3 7 4

Selection-Sort

sortiert

j = 1

21 6 3 7 4

Selection-Sort

sortiert

min = 1

j = 1

21 6 3 7 4

Selection-Sort

sortiert

min = 1

i = 2j = 1

21 6 3 7 4

Selection-Sort

sortiert

min = 1

i = 3j = 1

21 6 3 7 4

Selection-Sort

sortiert

min = 1

i = 4j = 1

21 6 3 7 4

Selection-Sort

sortiert

min = 1

i = 5j = 1

21 6 3 7 4

Selection-Sort

sortiert

min = 1

i = 5

tausche (a[j], a[min])

j = 1

21 6 3 7 4

Selection-Sort

sortiert

j = 1

21 6 3 7 4

Selection-Sort

sortiert

j = 2

21 6 3 7 4

Selection-Sort

sortiert

min = 2

j = 2

21 6 3 7 4

Selection-Sort

sortiert

min = 2

i = 3j = 2

21 6 3 7 4

Selection-Sort

sortiert

min = 3

i = 3j = 2

21 6 3 7 4

Selection-Sort

sortiert

min = 3

i = 4j = 2

21 6 3 7 4

Selection-Sort

sortiert

min = 3

i = 5j = 2

21 6 3 7 4

Selection-Sort

sortiert

min = 3

i = 5j = 2

tausche (a[j], a[min])

21 3 6 7 4

Selection-Sort

sortiert

j = 2

21 3 6 7 4

Selection-Sort

sortiert

j = 3

21 3 6 7 4

Selection-Sort

sortiert

j = 3

min = 3

21 3 6 7 4

Selection-Sort

sortiert

j = 3

min = 3

i = 4

21 3 6 7 4

Selection-Sort

sortiert

j = 3

min = 3

i = 5

21 3 6 7 4

Selection-Sort

sortiert

j = 3

min = 5

i = 5

21 3 6 7 4

Selection-Sort

sortiert

j = 3

min = 5

i = 5

tausche (a[j], a[min])

21 3 4 7 6

Selection-Sort

sortiert

j = 3

21 3 4 7 6

Selection-Sort

sortiert

j = 4

21 3 4 7 6

Selection-Sort

sortiert

j = 4

min = 4

21 3 4 7 6

Selection-Sort

sortiert

j = 4

min = 4

i = 5

21 3 4 7 6

Selection-Sort

sortiert

j = 4

min = 5

i = 5

21 3 4 7 6

Selection-Sort

sortiert

j = 4

min = 5

i = 5

tausche (a[j], a[min])

21 3 4 6 7

Selection-Sort

sortiert

j = 4

21 3 4 6 7

Selection-Sort

sortiert

j = 4

a[i] < a[min] solange i < n

min = i

i = j+1

i++

tausche a[j] mit a[min]

ja nein

solange j < n-1

j = 0

j++

min = j

Selection-Sort Nassi-Shneiderman-Diagramm

public class SelectionSortVersion1 { public static void main(String[] args) { int[] a = {3,2,6,1,7,4}; zeigeArray(a); int min = 0; for (int j=0; j<a.length-1; j++) { min = j; for (int i=j+1; i<a.length; i++ ) { if (a[i]<a[min]) { min = i; } } tausche(a,j,min); zeigeArray(a); } } // end of main

Selection-Sort Java-Code (Teil1)

public static void zeigeArray(int[] x) { for (int i=0;i<x.length ;i++ ) { System.out.print(x[i]+" "); } System.out.println(); } public static void tausche(int[] x, int pos1, int pos2) { int dummy = x[pos1]; x[pos1] = x[pos2]; x[pos2] = dummy; }

} // end of class

Selection-Sort Java-Code (Teil2)

public static void zeigeArray(int[] x) { for (int i=0;i<x.length ;i++ ) { System.out.print(x[i]+" "); } System.out.println();}public static void tausche(int[] x, int pos1, int pos2) { int dummy = x[pos1]; x[pos1] = x[pos2]; x[pos2] = dummy;}

• Selection-Sort

• Insertion-Sort

• Bubble-Sort

Insertion-Sort

Beschreibung Insertion-Sort

1. Betrachte das nullte Element als sortiert.2. Wähle das nächste Element und füge es an die richtige Stelle

innerhalb des sortierten Teilbereichs ein.3. Wiederhole den 2. Schritt solange, bis der unsortierte Teilbereich leer

ist.

Insertion-Sort

12 34 56

Insertion-Sort

134 56

2e =

Insertion-Sort

134 56

2

Insertion-Sort

134 562

Insertion-Sort

1

3

4 562

e =

Insertion-Sort

1

3

4 562

Insertion-Sort

13 4 562

Insertion-Sort

13 4 5

6

2

e =

Insertion-Sort

13 4 562

Insertion-Sort

1

3 4 562

e =

Insertion-Sort

1

3 4 562

Insertion-Sort

1

3 4 562

Insertion-Sort

1

3 4 562

Insertion-Sort

1

3 4 562

Insertion-Sort

1 3 4 562

Insertion-Sort

1 3 4

5

62

e =

Insertion-Sort

1 3 4

5

62

Insertion-Sort

1 3 4 5 62

i = j

solange i > 0 und a[i-1] > e

i--

solange j < n

j = 1

e = a[j]

a[i] = a[i-1]

a[i] = ej++

public class InsertionSortVersion1 { public static void main(String[] args) { int[] a = {4,2,3,6,1,5}; zeigeArray(a); int e = 0; for (int j=1; j<a.length; j++) { e = a[j]; int i = j; while ((i>0) && (a[i-1]>e)) { a[i] = a[i-1]; j--; } a[i] = e; zeigeArray(a); } } public static void zeigeArray(int[] x) { for (int i=0;i<x.length ;i++ ) { System.out.print(x[i]+" "); } System.out.println(); }}

Achtung! Bei && wird Bedingung2 nicht überprüft, wenn Bedingung1 "false" ist. Dies ist hier sinnvoll, da es kein a[-1] gibt.

• Selection-Sort

• Insertion-Sort

• Bubble-Sort

Bubble-Sort

Beschreibung Bubble-Sort1. Wähle die nullte Position als Ausgangsposition.2. Vertausche das Element an der Anfangspostion mit dem

Nachfolger, wenn der Nachfolger kleiner ist.3. Erhöhe die Ausgangsposition um den Wert 1.4. Wiederhole die Schritte 2 und 3, bis auch der letzte Wert der

Liste verglichen wurde.5. Wiederhole die Schritte 2 bis 4 (n-1) mal.

Bubble-Sort

12 34 56

1. Durchgang

Bubble-Sort

14 32 56

1. Durchgang

Bubble-Sort

14 32 56

1. Durchgang

Bubble-Sort

13 42 56

1. Durchgang

Bubble-Sort

13 42 56

1. Durchgang

Bubble-Sort

13 42 56

1. Durchgang

Bubble-Sort

63 42 51

1. Durchgang

Bubble-Sort

63 42 51

1. Durchgang

Bubble-Sort

53 42 61

1. Durchgang

Bubble-Sort

53 42 61

2. Durchgang

Bubble-Sort

53 42 61

2. Durchgang

Bubble-Sort

53 42 61

2. Durchgang

Bubble-Sort

53 12 64

2. Durchgang

Bubble-Sort

53 12 64

2. Durchgang

Bubble-Sort

53 12 64

2. Durchgang

Bubble-Sort

53 12 64

3. Durchgang

Bubble-Sort

53 12 64

3. Durchgang

Bubble-Sort

51 32 64

3. Durchgang

Bubble-Sort

51 32 64

3. Durchgang

Bubble-Sort

51 32 64

3. Durchgang

Bubble-Sort

51 32 64

3. Durchgang

Bubble-Sort

51 32 64

4. Durchgang

Bubble-Sort

52 31 64

4. Durchgang

Bubble-Sort

52 31 64

4. Durchgang

Bubble-Sort

52 31 64

4. Durchgang

Bubble-Sort

52 31 64

4. Durchgang

Bubble-Sort

52 31 64

4. Durchgang

Bubble-Sort

52 31 64

5. Durchgang

Bubble-Sort

52 31 64

5. Durchgang

Bubble-Sort

52 31 64

5. Durchgang

Bubble-Sort

52 31 64

5. Durchgang

Bubble-Sort

52 31 64

5. Durchgang

• Selection-Sort

• Insertion-Sort

• Bubble-Sort

i=0

solange i < n-1

ja

solange j < n-1

j=1

a[i] > a[i+1]

tausche a[i] mit a[i+1]

nein

i++

j++

public class BubbleSortVersion1 { public static void main(String[] args) { int[] a = {4,2,3,6,1,5}; zeigeArray(a); for (int j=1;j<a.length-1;j++) { for (int i=0;i<a.length-1;i++ ) { if (a[i]>a[i+1]) { tausche(a,i,i+1); } } } zeigeArray(a); } // end of main public static void zeigeArray(int[] x) { for (int i=0;i<x.length ;i++ ) { System.out.print(x[i]+" "); } // end of for System.out.println(); } public static void tausche(int[] x, int pos1, int pos2) { int dummy = x[pos1]; x[pos1] = x[pos2]; x[pos2] = dummy; }} // end of class

Stabilität

Anton3

Bernd3

Chris1

Chris1

Anton3

Bernd3

Anton3

Bernd3

Chris1

Handelt es sich bei Selection-Sort um ein stabiles Sortierverfahren?

Nach Namen sortierte Liste.

Anton3

Bernd3

Chris1

Handelt es sich bei Selection-Sort um ein stabiles Sortierverfahren?

Nach Namen sortierte Liste.

werden vertauscht

Anton3

Bernd3

Chris1

Handelt es sich bei Selection-Sort um ein stabiles Sortierverfahren?

Nach Namen sortierte Liste.

werden vertauscht

Chris1

Bernd3

Anton3

Nach Zahlen sortierte Liste.

Trotz gleicher Zahl wurde die Reihenfolge von Anton und Bernd geändert. Daraus folgt, dass es sich bei Selection-Sort um kein stabiles Sortierverfahren handelt.

Optimierungsmöglichkeiten von Bubble-Sort

nicht optimiert:n-1 Vergleiche pro Durchgangn-1 Durchgänge

1. Optimierungsmöglichkeit bei i Durchgängen:n-i Vergleiche pro Durchgang

2. Optimierungsmöglichkeit:Abbruch, wenn innerhalb eines Durchgangs keine Vertauschung stattgefunden hat.

Aufwandsabschätzung Bubble-Sort

Betrachtet werden soll die Anzahl A aller Vergleiche im nicht optimierten Fall.

n-1 Vergleiche pro Durchgangn-1 Durchgänge

2A n 1 n 1 n 2n 1

2O n

Der Vergleichsaufwand bei Bubble-Sort liegt im

in der Größenordnung:

Aufwandsabschätzung Bubble-Sort

Betrachtet werden soll die Anzahl A aller Vergleiche im optimierten Fall.

n-i Vergleiche pro Durchgangn-1 Durchgänge

(n 1) (n 2) ... 1 ?

1 ... (2) (n 1) ?

(5) (4) 3 2 1 ?

(1) (2) 3 4 5 ?

(6) (6) 6 6 6 30 n ... n n n n 1

2n n 1 n nA

2 2

Aufwandsabschätzung bezüglich der Vertauschungen bei Bubble-Sort (optimierte Variante 1)

schlechtester Fall: Bei jedem Vergleich wird auch getauscht.Vertauschungsaufwand liegt in der Größenordnung

durchschnittlicher Fall: Bei ungefähr jedem zweiten Vergleich wird getauscht.Vertauschungsaufwand liegt in der Größenordnung

bester Fall: Bei keinem Vergleich wird getauscht.Vertauschungsaufwand liegt in der Größenordnung 0.

2O n

2O n

Aufwandsabschätzung bezüglich der Vertauschungen bei Bubble-Sort (optimierte Variante 2 (mit Abbruchbedingung))

schlechtester Fall: Bei jedem Vergleich wird auch getauscht.Vertauschungsaufwand liegt in der Größenordnung

durchschnittlicher Fall: Bei ungefähr jedem zweiten Vergleich wird getauscht.Vertauschungsaufwand liegt in der Größenordnung

bester Fall: Bei keinem Vergleich wird getauscht.Vertauschungsaufwand liegt in der Größenordnung 0.

2O n

2O n

Recommended