6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und...
Transcript of 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und...
![Page 1: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/1.jpg)
6. C++ vertieft (I)
Kurzwiederholung: Vektoren, Zeiger und IteratorenBereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,Subskript-Operator, Move-Konstruktion, Iterator.
163
![Page 2: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/2.jpg)
Wir erinnern uns...#include <iostream>#include <vector>
int main(){// Vector of length 10std::vector<int> v(10,0);// Inputfor (int i = 0; i < v.length(); ++i)
std::cin >> v[i];// Outputfor (std::vector::iterator it = v.begin(); it != v.end(); ++it)
std::cout << ∗it << " ";}
Das wollen wir doch genau verstehen!
Und zumindest das scheint uns zu umständlich!
164
![Page 3: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/3.jpg)
Wir erinnern uns...#include <iostream>#include <vector>
int main(){// Vector of length 10std::vector<int> v(10,0);// Inputfor (int i = 0; i < v.length(); ++i)
std::cin >> v[i];// Outputfor (std::vector::iterator it = v.begin(); it != v.end(); ++it)
std::cout << ∗it << " ";}
Das wollen wir doch genau verstehen!
Und zumindest das scheint uns zu umständlich!
164
![Page 4: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/4.jpg)
Wir erinnern uns...#include <iostream>#include <vector>
int main(){// Vector of length 10std::vector<int> v(10,0);// Inputfor (int i = 0; i < v.length(); ++i)
std::cin >> v[i];// Outputfor (std::vector::iterator it = v.begin(); it != v.end(); ++it)
std::cout << ∗it << " ";}
Das wollen wir doch genau verstehen!
Und zumindest das scheint uns zu umständlich!
164
![Page 5: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/5.jpg)
Nutzliche Tools (1): auto (C++11)
Das Schlüsselwort auto:
Der Typ einer Variablen wird inferiert vom Initialisierer.
Beispiele
int x = 10;auto y = x; // intauto z = 3; // intstd::vector<double> v(5);auto i = v[3]; // double
165
![Page 6: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/6.jpg)
Nutzliche Tools (1): auto (C++11)
Das Schlüsselwort auto:
Der Typ einer Variablen wird inferiert vom Initialisierer.
Beispiele
int x = 10;
auto y = x; // intauto z = 3; // intstd::vector<double> v(5);auto i = v[3]; // double
165
![Page 7: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/7.jpg)
Nutzliche Tools (1): auto (C++11)
Das Schlüsselwort auto:
Der Typ einer Variablen wird inferiert vom Initialisierer.
Beispiele
int x = 10;auto y = x; // int
auto z = 3; // intstd::vector<double> v(5);auto i = v[3]; // double
165
![Page 8: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/8.jpg)
Nutzliche Tools (1): auto (C++11)
Das Schlüsselwort auto:
Der Typ einer Variablen wird inferiert vom Initialisierer.
Beispiele
int x = 10;auto y = x; // intauto z = 3; // int
std::vector<double> v(5);auto i = v[3]; // double
165
![Page 9: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/9.jpg)
Nutzliche Tools (1): auto (C++11)
Das Schlüsselwort auto:
Der Typ einer Variablen wird inferiert vom Initialisierer.
Beispiele
int x = 10;auto y = x; // intauto z = 3; // intstd::vector<double> v(5);
auto i = v[3]; // double
165
![Page 10: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/10.jpg)
Nutzliche Tools (1): auto (C++11)
Das Schlüsselwort auto:
Der Typ einer Variablen wird inferiert vom Initialisierer.
Beispiele
int x = 10;auto y = x; // intauto z = 3; // intstd::vector<double> v(5);auto i = v[3]; // double
165
![Page 11: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/11.jpg)
Etwas besser...
#include <iostream>#include <vector>
int main(){std::vector<int> v(10,0); // Vector of length 10
for (int i = 0; i < v.length(); ++i)std::cin >> v[i];
for (auto it = x.begin(); it != x.end(); ++it){std::cout << ∗it << " ";
}}
166
![Page 12: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/12.jpg)
Nutzliche Tools (2): Bereichsbasiertes for (C++11)for (range-declaration : range-expression)
statement;
range-declaration: benannte Variable vom Elementtyp der durchrange-expression spezifizierten Folge.range-expression: Ausdruck, der eine Folge von Elementen repräsentiert viaIterator-Paar begin(), end() oder in Form einer Initialisierungsliste.
Beispiele
std::vector<double> v(5);for (double x: v) std::cout << x; // 00000for (int x: {1,2,5}) std::cout << x; // 125for (double& x: v) x=5;
167
![Page 13: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/13.jpg)
Nutzliche Tools (2): Bereichsbasiertes for (C++11)for (range-declaration : range-expression)
statement;
range-declaration: benannte Variable vom Elementtyp der durchrange-expression spezifizierten Folge.range-expression: Ausdruck, der eine Folge von Elementen repräsentiert viaIterator-Paar begin(), end() oder in Form einer Initialisierungsliste.
Beispiele
std::vector<double> v(5);for (double x: v) std::cout << x; // 00000for (int x: {1,2,5}) std::cout << x; // 125for (double& x: v) x=5;
167
![Page 14: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/14.jpg)
Nutzliche Tools (2): Bereichsbasiertes for (C++11)for (range-declaration : range-expression)
statement;
range-declaration: benannte Variable vom Elementtyp der durchrange-expression spezifizierten Folge.range-expression: Ausdruck, der eine Folge von Elementen repräsentiert viaIterator-Paar begin(), end() oder in Form einer Initialisierungsliste.
Beispiele
std::vector<double> v(5);
for (double x: v) std::cout << x; // 00000for (int x: {1,2,5}) std::cout << x; // 125for (double& x: v) x=5;
167
![Page 15: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/15.jpg)
Nutzliche Tools (2): Bereichsbasiertes for (C++11)for (range-declaration : range-expression)
statement;
range-declaration: benannte Variable vom Elementtyp der durchrange-expression spezifizierten Folge.range-expression: Ausdruck, der eine Folge von Elementen repräsentiert viaIterator-Paar begin(), end() oder in Form einer Initialisierungsliste.
Beispiele
std::vector<double> v(5);for (double x: v) std::cout << x; // 00000
for (int x: {1,2,5}) std::cout << x; // 125for (double& x: v) x=5;
167
![Page 16: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/16.jpg)
Nutzliche Tools (2): Bereichsbasiertes for (C++11)for (range-declaration : range-expression)
statement;
range-declaration: benannte Variable vom Elementtyp der durchrange-expression spezifizierten Folge.range-expression: Ausdruck, der eine Folge von Elementen repräsentiert viaIterator-Paar begin(), end() oder in Form einer Initialisierungsliste.
Beispiele
std::vector<double> v(5);for (double x: v) std::cout << x; // 00000for (int x: {1,2,5}) std::cout << x; // 125
for (double& x: v) x=5;
167
![Page 17: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/17.jpg)
Nutzliche Tools (2): Bereichsbasiertes for (C++11)for (range-declaration : range-expression)
statement;
range-declaration: benannte Variable vom Elementtyp der durchrange-expression spezifizierten Folge.range-expression: Ausdruck, der eine Folge von Elementen repräsentiert viaIterator-Paar begin(), end() oder in Form einer Initialisierungsliste.
Beispiele
std::vector<double> v(5);for (double x: v) std::cout << x; // 00000for (int x: {1,2,5}) std::cout << x; // 125for (double& x: v) x=5;
167
![Page 18: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/18.jpg)
Ok, das ist cool!
#include <iostream>#include <vector>
int main(){std::vector<int> v(10,0); // Vector of length 10
for (auto& x: v)std::cin >> x;
for (const auto i: x)std::cout << i << " ";
}
168
![Page 19: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/19.jpg)
Fur unser genaues Verstandis
Wir bauen selbst eine Vektorklasse, die so etwas kann!
Auf dem Weg lernen wir etwas über
RAII (Resource Acquisition is Initialization) und Move-KonstruktionIndex-Operatoren und andere NützlichkeitenTemplatesException HandlingFunktoren und Lambda-Ausdrücke
169
![Page 20: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/20.jpg)
Fur unser genaues Verstandis
Wir bauen selbst eine Vektorklasse, die so etwas kann!
Auf dem Weg lernen wir etwas über
RAII (Resource Acquisition is Initialization) und Move-KonstruktionIndex-Operatoren und andere NützlichkeitenTemplatesException HandlingFunktoren und Lambda-Ausdrücke
169
![Page 21: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/21.jpg)
Fur unser genaues Verstandis
Wir bauen selbst eine Vektorklasse, die so etwas kann!
Auf dem Weg lernen wir etwas über
RAII (Resource Acquisition is Initialization) und Move-Konstruktion
Index-Operatoren und andere NützlichkeitenTemplatesException HandlingFunktoren und Lambda-Ausdrücke
169
![Page 22: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/22.jpg)
Fur unser genaues Verstandis
Wir bauen selbst eine Vektorklasse, die so etwas kann!
Auf dem Weg lernen wir etwas über
RAII (Resource Acquisition is Initialization) und Move-KonstruktionIndex-Operatoren und andere Nützlichkeiten
TemplatesException HandlingFunktoren und Lambda-Ausdrücke
169
![Page 23: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/23.jpg)
Fur unser genaues Verstandis
Wir bauen selbst eine Vektorklasse, die so etwas kann!
Auf dem Weg lernen wir etwas über
RAII (Resource Acquisition is Initialization) und Move-KonstruktionIndex-Operatoren und andere NützlichkeitenTemplates
Exception HandlingFunktoren und Lambda-Ausdrücke
169
![Page 24: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/24.jpg)
Fur unser genaues Verstandis
Wir bauen selbst eine Vektorklasse, die so etwas kann!
Auf dem Weg lernen wir etwas über
RAII (Resource Acquisition is Initialization) und Move-KonstruktionIndex-Operatoren und andere NützlichkeitenTemplatesException Handling
Funktoren und Lambda-Ausdrücke
169
![Page 25: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/25.jpg)
Fur unser genaues Verstandis
Wir bauen selbst eine Vektorklasse, die so etwas kann!
Auf dem Weg lernen wir etwas über
RAII (Resource Acquisition is Initialization) und Move-KonstruktionIndex-Operatoren und andere NützlichkeitenTemplatesException HandlingFunktoren und Lambda-Ausdrücke
169
![Page 26: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/26.jpg)
Eine Klasse fur Vektorenclass vector{
int size;double∗ elem;
public:// constructorsvector(): size{0}, elem{nullptr} {};
vector(int s):size{s}, elem{new double[s]} {}// destructor~vector(){
delete[] elem;}// something is missing here
}
170
![Page 27: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/27.jpg)
Elementzugriffeclass vector{
...// getter. pre: 0 <= i < size;double get(int i) const{
return elem[i];}// setter. pre: 0 <= i < size;void set(int i, double d){ // setter
elem[i] = d;}// length propertyint length() const {
return size;}
}
class vector{public :
vector ();vector( int s );~vector ();double get( int i ) const;void set( int i , double d);int length() const;
}
171
![Page 28: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/28.jpg)
Was lauft schief?int main(){
vector v(32);for (int i = 0; i<v.length(); ++i)
v.set(i,i);vector w = v;for (int i = 0; i<w.length(); ++i)
w.set(i,i∗i);return 0;
}
*** Error in ‘vector1’: double free or corruption(!prev): 0x0000000000d23c20 ***======= Backtrace: =========/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7fe5a5ac97e5]...
class vector{public :
vector ();vector( int s );~vector ();double get( int i );void set( int i , double d);int length() const;
}
172
![Page 29: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/29.jpg)
Was lauft schief?int main(){
vector v(32);for (int i = 0; i<v.length(); ++i)
v.set(i,i);vector w = v;for (int i = 0; i<w.length(); ++i)
w.set(i,i∗i);return 0;
}
*** Error in ‘vector1’: double free or corruption(!prev): 0x0000000000d23c20 ***======= Backtrace: =========/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7fe5a5ac97e5]...
class vector{public :
vector ();vector( int s );~vector ();double get( int i );void set( int i , double d);int length() const;
}
172
![Page 30: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/30.jpg)
Rule of Three!
class vector{...
public:// Copy constructorvector(const vector &v):
size{v.size}, elem{new double[v.size]} {std::copy(v.elem, v.elem+v.size, elem);
}}
class vector{public :
vector ();vector( int s );~vector ();vector(const vector &v);double get( int i );void set( int i , double d);int length() const;
}
173
![Page 31: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/31.jpg)
Rule of Three!class vector{...
// Assignment operatorvector& operator=(const vector&v){
if (v.elem == elem) return ∗this;if (elem != nullptr) delete[] elem;size = v.size;elem = new double[size];std::copy(v.elem, v.elem+v.size, elem);return ∗this;
}}
Jetzt ist es zumindest korrekt. Aber umständlich.
class vector{public :
vector ();vector( int s );~vector ();vector(const vector &v);vector& operator=(const vector&v);double get( int i );void set( int i , double d);int length() const;
}
174
![Page 32: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/32.jpg)
Rule of Three!class vector{...
// Assignment operatorvector& operator=(const vector&v){
if (v.elem == elem) return ∗this;if (elem != nullptr) delete[] elem;size = v.size;elem = new double[size];std::copy(v.elem, v.elem+v.size, elem);return ∗this;
}}
Jetzt ist es zumindest korrekt. Aber umständlich.
class vector{public :
vector ();vector( int s );~vector ();vector(const vector &v);vector& operator=(const vector&v);double get( int i );void set( int i , double d);int length() const;
}
174
![Page 33: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/33.jpg)
Eleganter geht so:class vector{...
// Assignment operatorvector& operator= (const vector&v){
vector cpy(v);swap(cpy);return ∗this;
}private:
// helper functionvoid swap(vector& v){
std::swap(size, v.size);std::swap(elem, v.elem);
}}
class vector{public :
vector ();vector( int s );~vector ();vector(const vector &v);vector& operator=(const vector&v);double get( int i );void set( int i , double d);int length() const;
}
175
![Page 34: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/34.jpg)
Arbeit an der Fassade.Getter und Setter unschön. Wir wollen einen Indexoperator.
Überladen! So?class vector{...
double operator[] (int pos) const{return elem[pos];
}
void operator[] (int pos, double value){elem[pos] = double;
}}
Nein!
176
![Page 35: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/35.jpg)
Arbeit an der Fassade.Getter und Setter unschön. Wir wollen einen Indexoperator.
Überladen!
So?class vector{...
double operator[] (int pos) const{return elem[pos];
}
void operator[] (int pos, double value){elem[pos] = double;
}}
Nein!
176
![Page 36: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/36.jpg)
Arbeit an der Fassade.Getter und Setter unschön. Wir wollen einen Indexoperator.
Überladen! So?class vector{...
double operator[] (int pos) const{return elem[pos];
}
void operator[] (int pos, double value){elem[pos] = double;
}}
Nein!
176
![Page 37: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/37.jpg)
Arbeit an der Fassade.Getter und Setter unschön. Wir wollen einen Indexoperator.
Überladen! So?class vector{...
double operator[] (int pos) const{return elem[pos];
}
void operator[] (int pos, double value){elem[pos] = double;
}}
Nein!
176
![Page 38: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/38.jpg)
Referenztypen!
class vector{...
// for const objectsdouble operator[] (int pos) const{
return elem[pos];}// for non−const objectsdouble& operator[] (int pos){
return elem[pos]; // return by reference!}
}
class vector{public :
vector ();vector( int s );~vector ();vector(const vector &v);vector& operator=(const vector&v);double operator[] ( int pos) const;double& operator[] ( int pos);int length() const;
}
177
![Page 39: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/39.jpg)
Soweit, so gut.int main(){
vector v(32); // Constructorfor (int i = 0; i<v.length(); ++i)
v[i] = i; // Index−Operator (Referenz!)
vector w = v; // Copy Constructorfor (int i = 0; i<w.length(); ++i)
w[i] = i∗i;
const auto u = w;for (int i = 0; i<u.length(); ++i)
std::cout << v[i] << ":" << u[i] << " "; // 0:0 1:1 2:4 ...return 0;
}
class vector{public :
vector ();vector( int s );~vector ();vector(const vector &v);vector& operator=(const vector&v);double operator[] ( int pos) const;double& operator[] ( int pos);int length() const;
}
178
![Page 40: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/40.jpg)
Anzahl KopienWie oft wird v kopiert?vector operator+ (const vector& l, double r){
vector result (l);
// Kopie von l nach result
for (int i = 0; i < l.length(); ++i) result[i] = l[i] + r;return result;
// Dekonstruktion von result nach Zuweisung
}
int main(){vector v(16);
// Allokation von elems[16]
v = v + 1;
// Kopie bei Zuweisung!
return 0;
// Dekonstruktion von v
}
v wird zwei Mal kopiert.
179
![Page 41: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/41.jpg)
Anzahl KopienWie oft wird v kopiert?vector operator+ (const vector& l, double r){
vector result (l); // Kopie von l nach resultfor (int i = 0; i < l.length(); ++i) result[i] = l[i] + r;return result; // Dekonstruktion von result nach Zuweisung
}
int main(){vector v(16); // Allokation von elems[16]v = v + 1; // Kopie bei Zuweisung!return 0; // Dekonstruktion von v
}
v wird zwei Mal kopiert.
179
![Page 42: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/42.jpg)
Anzahl KopienWie oft wird v kopiert?vector operator+ (const vector& l, double r){
vector result (l);
// Kopie von l nach result
for (int i = 0; i < l.length(); ++i) result[i] = l[i] + r;return result;
// Dekonstruktion von result nach Zuweisung
}
int main(){vector v(16);
// Allokation von elems[16]
v = v + 1;
// Kopie bei Zuweisung!
return 0;
// Dekonstruktion von v
}
v wird zwei Mal kopiert.179
![Page 43: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/43.jpg)
Move-Konstruktor und Move-Zuweisungclass vector{...
// move constructorvector (vector&& v){
swap(v);};// move assignmentvector& operator=(vector&& v){
swap(v);return ∗this;
};}
class vector{public :
vector ();vector( int s );~vector ();vector(const vector &v);vector& operator=(const vector&v);vector (vector&& v);vector& operator=(vector&& v);double operator[] ( int pos) const;double& operator[] ( int pos);int length() const;
}
180
![Page 44: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/44.jpg)
Erklarung
Wenn das Quellobjekt einer Zuweisung direkt nach der Zuweisungnicht weiter existiert, dann kann der Compiler denMove-Zuweisungsoperator anstelle des Zuweisungsoperatorseinsetzen.3 Damit wird eine potentiell teure Kopie vermieden.
Anzahl der Kopien im vorigen Beispiel reduziert sich zu 1.
3Analoges gilt für den Kopier-Konstruktor und den Move-Konstruktor.181
![Page 45: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/45.jpg)
Bereichsbasiertes for
Wir wollten doch das:
vector v = ...;for (auto x: v)
std::cout << x << " ";
Dafür müssen wir einen Iterator über begin und end bereitstellen.
182
![Page 46: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/46.jpg)
Bereichsbasiertes for
Wir wollten doch das:
vector v = ...;for (auto x: v)
std::cout << x << " ";
Dafür müssen wir einen Iterator über begin und end bereitstellen.
182
![Page 47: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/47.jpg)
Iterator fur den Vektor
class vector{...
// Iteratordouble∗ begin(){
return elem;}double∗ end(){
return elem+size;}
}
class vector{public :
vector ();vector( int s );~vector ();vector(const vector &v);vector& operator=(const vector&v);vector (vector&& v);vector& operator=(vector&& v);double operator[] ( int pos) const;double& operator[] ( int pos);int length() const;double∗ begin();double∗ end();
}
183
![Page 48: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/48.jpg)
Const Iterator fur den Vektor
class vector{...
// Const−Iteratorconst double∗ begin() const{
return elem;}const double∗ end() const{
return elem+size;}
}
class vector{public :
vector ();vector( int s );~vector ();vector(const vector &v);vector& operator=(const vector&v);vector (vector&& v);vector& operator=(vector&& v);double operator[] ( int pos) const;double& operator[] ( int pos);int length() const;double∗ begin();double∗ end();const double∗ begin() const;const double∗ end() const;
}
184
![Page 49: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/49.jpg)
Zwischenstandvector Natural(int from, int to){
vector v(to−from+1);for (auto& x: v) x = from++;return v;
}
int main(){vector v = Natural(5,12);for (auto x: v)
std::cout << x << " "; // 5 6 7 8 9 10 11 12std::cout << "\n";std::cout << "sum="
<< std::accumulate(v.begin(), v.end(),0); // sum = 68return 0;
}185
![Page 50: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/50.jpg)
Nutzliche Tools (3): using (C++11)using ersetzt in C++11 das alte typedef.
using identifier = type−id;
Beispiel
using element_t = double;class vector{
std::size_t size;element_t∗ elem;
...}
186
![Page 51: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/51.jpg)
Nutzliche Tools (3): using (C++11)using ersetzt in C++11 das alte typedef.
using identifier = type−id;
Beispiel
using element_t = double;class vector{
std::size_t size;element_t∗ elem;
...}
186
![Page 52: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/52.jpg)
7. Sortieren I
Einfache Sortierverfahren
187
![Page 53: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/53.jpg)
7.1 Einfaches Sortieren
Sortieren durch Auswahl, Sortieren durch Einfügen, Bubblesort[Ottman/Widmayer, Kap. 2.1, Cormen et al, Kap. 2.1, 2.2, Exercise 2.2-2, Problem2-2
188
![Page 54: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/54.jpg)
Problemstellung
Eingabe: Ein Array A = (A[1], ..., A[n]) der Länge n.
Ausgabe: Eine Permutation A′ von A, die sortiert ist: A′[i] ≤ A′[j]für alle 1 ≤ i ≤ j ≤ n.
189
![Page 55: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/55.jpg)
Algorithmus: IsSorted(A)
Input : Array A = (A[1], ..., A[n]) der Lange n.Output : Boolesche Entscheidung “sortiert” oder “nicht sortiert”for i← 1 to n− 1 do
if A[i] > A[i + 1] thenreturn “nicht sortiert”;
return “sortiert”;
190
![Page 56: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/56.jpg)
Beobachtung
IsSorted(A):“nicht sortiert”, wenn A[i] > A[i + 1] für ein i.
⇒ Idee:for j ← 1 to n− 1 do
if A[j] > A[j + 1] thenswap(A[j], A[j + 1]);
191
![Page 57: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/57.jpg)
Beobachtung
IsSorted(A):“nicht sortiert”, wenn A[i] > A[i + 1] für ein i.
⇒ Idee:
for j ← 1 to n− 1 doif A[j] > A[j + 1] then
swap(A[j], A[j + 1]);
191
![Page 58: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/58.jpg)
Beobachtung
IsSorted(A):“nicht sortiert”, wenn A[i] > A[i + 1] für ein i.
⇒ Idee:for j ← 1 to n− 1 do
if A[j] > A[j + 1] thenswap(A[j], A[j + 1]);
191
![Page 59: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/59.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1)
5 6 2 8 4 1 (j = 2)
5 2 6 8 4 1 (j = 3)
5 2 6 8 4 1 (j = 4)
5 2 6 4 8 1 (j = 5)
5 2 6 4 1 8
Nicht sortiert! .Aber das grössteElement wandertganz nach rechts.⇒ Neue Idee!
192
![Page 60: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/60.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1)
5 6 2 8 4 1 (j = 2)
5 2 6 8 4 1 (j = 3)
5 2 6 8 4 1 (j = 4)
5 2 6 4 8 1 (j = 5)
5 2 6 4 1 8
Nicht sortiert! .Aber das grössteElement wandertganz nach rechts.⇒ Neue Idee!
192
![Page 61: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/61.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1)
5 6 2 8 4 1 (j = 2)
5 2 6 8 4 1 (j = 3)
5 2 6 8 4 1 (j = 4)
5 2 6 4 8 1 (j = 5)
5 2 6 4 1 8
Nicht sortiert! .Aber das grössteElement wandertganz nach rechts.⇒ Neue Idee!
192
![Page 62: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/62.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1)
5 6 2 8 4 1 (j = 2)
5 2 6 8 4 1 (j = 3)
5 2 6 8 4 1 (j = 4)
5 2 6 4 8 1 (j = 5)
5 2 6 4 1 8
Nicht sortiert! .Aber das grössteElement wandertganz nach rechts.⇒ Neue Idee!
192
![Page 63: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/63.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1)
5 6 2 8 4 1 (j = 2)
5 2 6 8 4 1 (j = 3)
5 2 6 8 4 1 (j = 4)
5 2 6 4 8 1 (j = 5)
5 2 6 4 1 8
Nicht sortiert! .Aber das grössteElement wandertganz nach rechts.⇒ Neue Idee!
192
![Page 64: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/64.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1)
5 6 2 8 4 1 (j = 2)
5 2 6 8 4 1 (j = 3)
5 2 6 8 4 1 (j = 4)
5 2 6 4 8 1 (j = 5)
5 2 6 4 1 8
Nicht sortiert! .Aber das grössteElement wandertganz nach rechts.⇒ Neue Idee!
192
![Page 65: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/65.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1)
5 6 2 8 4 1 (j = 2)
5 2 6 8 4 1 (j = 3)
5 2 6 8 4 1 (j = 4)
5 2 6 4 8 1 (j = 5)
5 2 6 4 1 8
Nicht sortiert! .
Aber das grössteElement wandertganz nach rechts.⇒ Neue Idee!
192
![Page 66: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/66.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1)
5 6 2 8 4 1 (j = 2)
5 2 6 8 4 1 (j = 3)
5 2 6 8 4 1 (j = 4)
5 2 6 4 8 1 (j = 5)
5 2 6 4 1 8
Nicht sortiert! .
Aber das grössteElement wandertganz nach rechts.⇒ Neue Idee!
192
![Page 67: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/67.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1)
5 6 2 8 4 1 (j = 2)
5 2 6 8 4 1 (j = 3)
5 2 6 8 4 1 (j = 4)
5 2 6 4 8 1 (j = 5)
5 2 6 4 1 8
Nicht sortiert! .Aber das grössteElement wandertganz nach rechts.⇒ Neue Idee!
192
![Page 68: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/68.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1, i = 1)5 6 2 8 4 1 (j = 2)5 2 6 8 4 1 (j = 3)5 2 6 8 4 1 (j = 4)5 2 6 4 8 1 (j = 5)5 2 6 4 1 8 (j = 1, i = 2)2 5 6 4 1 8 (j = 2)2 5 6 4 1 8 (j = 3)2 5 4 6 1 8 (j = 4)2 5 4 1 6 8 (j = 1, i = 3)2 5 4 1 6 8 (j = 2)2 4 5 1 6 8 (j = 3)2 4 1 5 6 8 (j = 1, i = 4)2 4 1 5 6 8 (j = 2)2 1 4 5 6 8 (i = 1, j = 5)1 2 4 5 6 8
Wende dasVerfahren iterativ an.
Für A[1, . . . , n],
dann A[1, . . . , n− 1],dann A[1, . . . , n− 2],etc.
193
![Page 69: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/69.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1, i = 1)5 6 2 8 4 1 (j = 2)5 2 6 8 4 1 (j = 3)5 2 6 8 4 1 (j = 4)5 2 6 4 8 1 (j = 5)5 2 6 4 1 8 (j = 1, i = 2)2 5 6 4 1 8 (j = 2)2 5 6 4 1 8 (j = 3)2 5 4 6 1 8 (j = 4)2 5 4 1 6 8 (j = 1, i = 3)2 5 4 1 6 8 (j = 2)2 4 5 1 6 8 (j = 3)2 4 1 5 6 8 (j = 1, i = 4)2 4 1 5 6 8 (j = 2)2 1 4 5 6 8 (i = 1, j = 5)1 2 4 5 6 8
Wende dasVerfahren iterativ an.Für A[1, . . . , n],
dann A[1, . . . , n− 1],dann A[1, . . . , n− 2],etc.
193
![Page 70: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/70.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1, i = 1)5 6 2 8 4 1 (j = 2)5 2 6 8 4 1 (j = 3)5 2 6 8 4 1 (j = 4)5 2 6 4 8 1 (j = 5)5 2 6 4 1 8 (j = 1, i = 2)2 5 6 4 1 8 (j = 2)2 5 6 4 1 8 (j = 3)2 5 4 6 1 8 (j = 4)2 5 4 1 6 8 (j = 1, i = 3)2 5 4 1 6 8 (j = 2)2 4 5 1 6 8 (j = 3)2 4 1 5 6 8 (j = 1, i = 4)2 4 1 5 6 8 (j = 2)2 1 4 5 6 8 (i = 1, j = 5)1 2 4 5 6 8
Wende dasVerfahren iterativ an.Für A[1, . . . , n],dann A[1, . . . , n− 1],
dann A[1, . . . , n− 2],etc.
193
![Page 71: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/71.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1, i = 1)5 6 2 8 4 1 (j = 2)5 2 6 8 4 1 (j = 3)5 2 6 8 4 1 (j = 4)5 2 6 4 8 1 (j = 5)5 2 6 4 1 8 (j = 1, i = 2)2 5 6 4 1 8 (j = 2)2 5 6 4 1 8 (j = 3)2 5 4 6 1 8 (j = 4)2 5 4 1 6 8 (j = 1, i = 3)2 5 4 1 6 8 (j = 2)2 4 5 1 6 8 (j = 3)2 4 1 5 6 8 (j = 1, i = 4)2 4 1 5 6 8 (j = 2)2 1 4 5 6 8 (i = 1, j = 5)1 2 4 5 6 8
Wende dasVerfahren iterativ an.Für A[1, . . . , n],dann A[1, . . . , n− 1],
dann A[1, . . . , n− 2],etc.
193
![Page 72: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/72.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1, i = 1)5 6 2 8 4 1 (j = 2)5 2 6 8 4 1 (j = 3)5 2 6 8 4 1 (j = 4)5 2 6 4 8 1 (j = 5)5 2 6 4 1 8 (j = 1, i = 2)2 5 6 4 1 8 (j = 2)2 5 6 4 1 8 (j = 3)2 5 4 6 1 8 (j = 4)2 5 4 1 6 8 (j = 1, i = 3)2 5 4 1 6 8 (j = 2)2 4 5 1 6 8 (j = 3)2 4 1 5 6 8 (j = 1, i = 4)2 4 1 5 6 8 (j = 2)2 1 4 5 6 8 (i = 1, j = 5)1 2 4 5 6 8
Wende dasVerfahren iterativ an.Für A[1, . . . , n],dann A[1, . . . , n− 1],
dann A[1, . . . , n− 2],etc.
193
![Page 73: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/73.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1, i = 1)5 6 2 8 4 1 (j = 2)5 2 6 8 4 1 (j = 3)5 2 6 8 4 1 (j = 4)5 2 6 4 8 1 (j = 5)5 2 6 4 1 8 (j = 1, i = 2)2 5 6 4 1 8 (j = 2)2 5 6 4 1 8 (j = 3)2 5 4 6 1 8 (j = 4)2 5 4 1 6 8 (j = 1, i = 3)2 5 4 1 6 8 (j = 2)2 4 5 1 6 8 (j = 3)2 4 1 5 6 8 (j = 1, i = 4)2 4 1 5 6 8 (j = 2)2 1 4 5 6 8 (i = 1, j = 5)1 2 4 5 6 8
Wende dasVerfahren iterativ an.Für A[1, . . . , n],dann A[1, . . . , n− 1],dann A[1, . . . , n− 2],
etc.
193
![Page 74: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/74.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1, i = 1)5 6 2 8 4 1 (j = 2)5 2 6 8 4 1 (j = 3)5 2 6 8 4 1 (j = 4)5 2 6 4 8 1 (j = 5)5 2 6 4 1 8 (j = 1, i = 2)2 5 6 4 1 8 (j = 2)2 5 6 4 1 8 (j = 3)2 5 4 6 1 8 (j = 4)2 5 4 1 6 8 (j = 1, i = 3)2 5 4 1 6 8 (j = 2)2 4 5 1 6 8 (j = 3)2 4 1 5 6 8 (j = 1, i = 4)2 4 1 5 6 8 (j = 2)2 1 4 5 6 8 (i = 1, j = 5)1 2 4 5 6 8
Wende dasVerfahren iterativ an.Für A[1, . . . , n],dann A[1, . . . , n− 1],dann A[1, . . . , n− 2],
etc.
193
![Page 75: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/75.jpg)
Ausprobieren
5 6 2 8 4 1 (j = 1, i = 1)5 6 2 8 4 1 (j = 2)5 2 6 8 4 1 (j = 3)5 2 6 8 4 1 (j = 4)5 2 6 4 8 1 (j = 5)5 2 6 4 1 8 (j = 1, i = 2)2 5 6 4 1 8 (j = 2)2 5 6 4 1 8 (j = 3)2 5 4 6 1 8 (j = 4)2 5 4 1 6 8 (j = 1, i = 3)2 5 4 1 6 8 (j = 2)2 4 5 1 6 8 (j = 3)2 4 1 5 6 8 (j = 1, i = 4)2 4 1 5 6 8 (j = 2)2 1 4 5 6 8 (i = 1, j = 5)1 2 4 5 6 8
Wende dasVerfahren iterativ an.Für A[1, . . . , n],dann A[1, . . . , n− 1],dann A[1, . . . , n− 2],etc.
193
![Page 76: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/76.jpg)
Algorithmus: Bubblesort
Input : Array A = (A[1], . . . , A[n]), n ≥ 0.Output : Sortiertes Array Afor i← 1 to n− 1 do
for j ← 1 to n− i doif A[j] > A[j + 1] then
swap(A[j], A[j + 1]);
194
![Page 77: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/77.jpg)
Analyse
Anzahl Schlüsselvergleiche∑n−1
i=1 (n− i) = n(n−1)2 = Θ(n2).
Anzahl Vertauschungen im schlechtesten Fall: Θ(n2)
? Was ist der schlechteste Fall?
! Wenn A absteigend sortiert ist.
? Algorithmus kann so angepasst werden, dass er dann abbricht, wenn dasArray sortiert ist. Schlüsselvergleiche und Vertauschungen des modifiziertenAlgorithmus im besten Fall?
! Schlüsselvergleiche = n− 1. Vertauschungen = 0.
195
![Page 78: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/78.jpg)
Analyse
Anzahl Schlüsselvergleiche∑n−1
i=1 (n− i) = n(n−1)2 = Θ(n2).
Anzahl Vertauschungen im schlechtesten Fall: Θ(n2)
? Was ist der schlechteste Fall?! Wenn A absteigend sortiert ist.
? Algorithmus kann so angepasst werden, dass er dann abbricht, wenn dasArray sortiert ist. Schlüsselvergleiche und Vertauschungen des modifiziertenAlgorithmus im besten Fall?
! Schlüsselvergleiche = n− 1. Vertauschungen = 0.
195
![Page 79: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/79.jpg)
Analyse
Anzahl Schlüsselvergleiche∑n−1
i=1 (n− i) = n(n−1)2 = Θ(n2).
Anzahl Vertauschungen im schlechtesten Fall: Θ(n2)
? Was ist der schlechteste Fall?! Wenn A absteigend sortiert ist.
? Algorithmus kann so angepasst werden, dass er dann abbricht, wenn dasArray sortiert ist. Schlüsselvergleiche und Vertauschungen des modifiziertenAlgorithmus im besten Fall?
! Schlüsselvergleiche = n− 1. Vertauschungen = 0.
195
![Page 80: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/80.jpg)
Analyse
Anzahl Schlüsselvergleiche∑n−1
i=1 (n− i) = n(n−1)2 = Θ(n2).
Anzahl Vertauschungen im schlechtesten Fall: Θ(n2)
? Was ist der schlechteste Fall?! Wenn A absteigend sortiert ist.
? Algorithmus kann so angepasst werden, dass er dann abbricht, wenn dasArray sortiert ist. Schlüsselvergleiche und Vertauschungen des modifiziertenAlgorithmus im besten Fall?
! Schlüsselvergleiche = n− 1. Vertauschungen = 0.
195
![Page 81: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/81.jpg)
Sortieren durch Auswahl
5 6 2 8 4 1 (i = 1)
1 6 2 8 4 5 (i = 2)
1 2 6 8 4 5 (i = 3)
1 2 4 8 6 5 (i = 4)
1 2 4 5 6 8 (i = 5)
1 2 4 5 6 8 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehenwie bei Bubblesort.
Auswahl deskleinsten (odergrössten) Elementesdurch direkte Suche.
196
![Page 82: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/82.jpg)
Sortieren durch Auswahl
5 6 2 8 4 1 (i = 1)
1 6 2 8 4 5 (i = 2)
1 2 6 8 4 5 (i = 3)
1 2 4 8 6 5 (i = 4)
1 2 4 5 6 8 (i = 5)
1 2 4 5 6 8 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehenwie bei Bubblesort.Auswahl deskleinsten (odergrössten) Elementesdurch direkte Suche.
196
![Page 83: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/83.jpg)
Sortieren durch Auswahl
5 6 2 8 4 1 (i = 1)
1 6 2 8 4 5 (i = 2)
1 2 6 8 4 5 (i = 3)
1 2 4 8 6 5 (i = 4)
1 2 4 5 6 8 (i = 5)
1 2 4 5 6 8 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehenwie bei Bubblesort.Auswahl deskleinsten (odergrössten) Elementesdurch direkte Suche.
196
![Page 84: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/84.jpg)
Sortieren durch Auswahl
5 6 2 8 4 1 (i = 1)
1 6 2 8 4 5 (i = 2)
1 2 6 8 4 5 (i = 3)
1 2 4 8 6 5 (i = 4)
1 2 4 5 6 8 (i = 5)
1 2 4 5 6 8 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehenwie bei Bubblesort.Auswahl deskleinsten (odergrössten) Elementesdurch direkte Suche.
196
![Page 85: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/85.jpg)
Sortieren durch Auswahl
5 6 2 8 4 1 (i = 1)
1 6 2 8 4 5 (i = 2)
1 2 6 8 4 5 (i = 3)
1 2 4 8 6 5 (i = 4)
1 2 4 5 6 8 (i = 5)
1 2 4 5 6 8 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehenwie bei Bubblesort.Auswahl deskleinsten (odergrössten) Elementesdurch direkte Suche.
196
![Page 86: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/86.jpg)
Sortieren durch Auswahl
5 6 2 8 4 1 (i = 1)
1 6 2 8 4 5 (i = 2)
1 2 6 8 4 5 (i = 3)
1 2 4 8 6 5 (i = 4)
1 2 4 5 6 8 (i = 5)
1 2 4 5 6 8 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehenwie bei Bubblesort.Auswahl deskleinsten (odergrössten) Elementesdurch direkte Suche.
196
![Page 87: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/87.jpg)
Sortieren durch Auswahl
5 6 2 8 4 1 (i = 1)
1 6 2 8 4 5 (i = 2)
1 2 6 8 4 5 (i = 3)
1 2 4 8 6 5 (i = 4)
1 2 4 5 6 8 (i = 5)
1 2 4 5 6 8 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehenwie bei Bubblesort.Auswahl deskleinsten (odergrössten) Elementesdurch direkte Suche.
196
![Page 88: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/88.jpg)
Sortieren durch Auswahl
5 6 2 8 4 1 (i = 1)
1 6 2 8 4 5 (i = 2)
1 2 6 8 4 5 (i = 3)
1 2 4 8 6 5 (i = 4)
1 2 4 5 6 8 (i = 5)
1 2 4 5 6 8 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehenwie bei Bubblesort.Auswahl deskleinsten (odergrössten) Elementesdurch direkte Suche.
196
![Page 89: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/89.jpg)
Sortieren durch Auswahl
5 6 2 8 4 1 (i = 1)
1 6 2 8 4 5 (i = 2)
1 2 6 8 4 5 (i = 3)
1 2 4 8 6 5 (i = 4)
1 2 4 5 6 8 (i = 5)
1 2 4 5 6 8 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehenwie bei Bubblesort.Auswahl deskleinsten (odergrössten) Elementesdurch direkte Suche.
196
![Page 90: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/90.jpg)
Sortieren durch Auswahl
5 6 2 8 4 1 (i = 1)
1 6 2 8 4 5 (i = 2)
1 2 6 8 4 5 (i = 3)
1 2 4 8 6 5 (i = 4)
1 2 4 5 6 8 (i = 5)
1 2 4 5 6 8 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehenwie bei Bubblesort.Auswahl deskleinsten (odergrössten) Elementesdurch direkte Suche.
196
![Page 91: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/91.jpg)
Sortieren durch Auswahl
5 6 2 8 4 1 (i = 1)
1 6 2 8 4 5 (i = 2)
1 2 6 8 4 5 (i = 3)
1 2 4 8 6 5 (i = 4)
1 2 4 5 6 8 (i = 5)
1 2 4 5 6 8 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehenwie bei Bubblesort.Auswahl deskleinsten (odergrössten) Elementesdurch direkte Suche.
196
![Page 92: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/92.jpg)
Sortieren durch Auswahl
5 6 2 8 4 1 (i = 1)
1 6 2 8 4 5 (i = 2)
1 2 6 8 4 5 (i = 3)
1 2 4 8 6 5 (i = 4)
1 2 4 5 6 8 (i = 5)
1 2 4 5 6 8 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehenwie bei Bubblesort.Auswahl deskleinsten (odergrössten) Elementesdurch direkte Suche.
196
![Page 93: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/93.jpg)
Sortieren durch Auswahl
5 6 2 8 4 1 (i = 1)
1 6 2 8 4 5 (i = 2)
1 2 6 8 4 5 (i = 3)
1 2 4 8 6 5 (i = 4)
1 2 4 5 6 8 (i = 5)
1 2 4 5 6 8 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehenwie bei Bubblesort.Auswahl deskleinsten (odergrössten) Elementesdurch direkte Suche.
196
![Page 94: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/94.jpg)
Algorithmus: Sortieren durch Auswahl
Input : Array A = (A[1], . . . , A[n]), n ≥ 0.Output : Sortiertes Array Afor i← 1 to n− 1 do
p← ifor j ← i + 1 to n do
if A[j] < A[p] thenp← j;
swap(A[i], A[p])
197
![Page 95: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/95.jpg)
Analyse
Anzahl Vergleiche im schlechtesten Fall:
Θ(n2).
Anzahl Vertauschungen im schlechtesten Fall: n− 1 = Θ(n)
Anzahl Vergleiche im besten Fall: Θ(n2).
198
![Page 96: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/96.jpg)
Analyse
Anzahl Vergleiche im schlechtesten Fall: Θ(n2).
Anzahl Vertauschungen im schlechtesten Fall:
n− 1 = Θ(n)
Anzahl Vergleiche im besten Fall: Θ(n2).
198
![Page 97: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/97.jpg)
Analyse
Anzahl Vergleiche im schlechtesten Fall: Θ(n2).
Anzahl Vertauschungen im schlechtesten Fall: n− 1 = Θ(n)
Anzahl Vergleiche im besten Fall:
Θ(n2).
198
![Page 98: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/98.jpg)
Analyse
Anzahl Vergleiche im schlechtesten Fall: Θ(n2).
Anzahl Vertauschungen im schlechtesten Fall: n− 1 = Θ(n)
Anzahl Vergleiche im besten Fall: Θ(n2).
198
![Page 99: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/99.jpg)
Sortieren durch Einfugen
5 6 2 8 4 1 (i = 1)
5 6 2 8 4 1 (i = 2)
5 6 2 8 4 1 (i = 3)
2 5 6 8 4 1 (i = 4)
2 5 6 8 4 1 (i = 5)
2 4 5 6 8 1 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehen:i = 1...n
Einfügeposition fürElement ibestimmen.Element i einfügen,
ggfs. Verschiebungnötig.
199
![Page 100: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/100.jpg)
Sortieren durch Einfugen
5 6 2 8 4 1 (i = 1)
5 6 2 8 4 1 (i = 2)
5 6 2 8 4 1 (i = 3)
2 5 6 8 4 1 (i = 4)
2 5 6 8 4 1 (i = 5)
2 4 5 6 8 1 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehen:i = 1...n
Einfügeposition fürElement ibestimmen.Element i einfügen,
ggfs. Verschiebungnötig.
199
![Page 101: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/101.jpg)
Sortieren durch Einfugen
5 6 2 8 4 1 (i = 1)
5 6 2 8 4 1 (i = 2)
5 6 2 8 4 1 (i = 3)
2 5 6 8 4 1 (i = 4)
2 5 6 8 4 1 (i = 5)
2 4 5 6 8 1 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehen:i = 1...n
Einfügeposition fürElement ibestimmen.
Element i einfügen,
ggfs. Verschiebungnötig.
199
![Page 102: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/102.jpg)
Sortieren durch Einfugen
5 6 2 8 4 1 (i = 1)
5 6 2 8 4 1 (i = 2)
5 6 2 8 4 1 (i = 3)
2 5 6 8 4 1 (i = 4)
2 5 6 8 4 1 (i = 5)
2 4 5 6 8 1 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehen:i = 1...n
Einfügeposition fürElement ibestimmen.Element i einfügen,
ggfs. Verschiebungnötig.
199
![Page 103: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/103.jpg)
Sortieren durch Einfugen
5 6 2 8 4 1 (i = 1)
5 6 2 8 4 1 (i = 2)
5 6 2 8 4 1 (i = 3)
2 5 6 8 4 1 (i = 4)
2 5 6 8 4 1 (i = 5)
2 4 5 6 8 1 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehen:i = 1...n
Einfügeposition fürElement ibestimmen.Element i einfügen,
ggfs. Verschiebungnötig.
199
![Page 104: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/104.jpg)
Sortieren durch Einfugen
5 6 2 8 4 1 (i = 1)
5 6 2 8 4 1 (i = 2)
5 6 2 8 4 1 (i = 3)
2 5 6 8 4 1 (i = 4)
2 5 6 8 4 1 (i = 5)
2 4 5 6 8 1 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehen:i = 1...n
Einfügeposition fürElement ibestimmen.Element i einfügen,
ggfs. Verschiebungnötig.
199
![Page 105: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/105.jpg)
Sortieren durch Einfugen
5 6 2 8 4 1 (i = 1)
5 6 2 8 4 1 (i = 2)
5 6 2 8 4 1 (i = 3)
2 5 6 8 4 1 (i = 4)
2 5 6 8 4 1 (i = 5)
2 4 5 6 8 1 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehen:i = 1...n
Einfügeposition fürElement ibestimmen.Element i einfügen,ggfs. Verschiebungnötig.
199
![Page 106: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/106.jpg)
Sortieren durch Einfugen
5 6 2 8 4 1 (i = 1)
5 6 2 8 4 1 (i = 2)
5 6 2 8 4 1 (i = 3)
2 5 6 8 4 1 (i = 4)
2 5 6 8 4 1 (i = 5)
2 4 5 6 8 1 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehen:i = 1...n
Einfügeposition fürElement ibestimmen.Element i einfügen,ggfs. Verschiebungnötig.
199
![Page 107: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/107.jpg)
Sortieren durch Einfugen
5 6 2 8 4 1 (i = 1)
5 6 2 8 4 1 (i = 2)
5 6 2 8 4 1 (i = 3)
2 5 6 8 4 1 (i = 4)
2 5 6 8 4 1 (i = 5)
2 4 5 6 8 1 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehen:i = 1...n
Einfügeposition fürElement ibestimmen.Element i einfügen,ggfs. Verschiebungnötig.
199
![Page 108: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/108.jpg)
Sortieren durch Einfugen
5 6 2 8 4 1 (i = 1)
5 6 2 8 4 1 (i = 2)
5 6 2 8 4 1 (i = 3)
2 5 6 8 4 1 (i = 4)
2 5 6 8 4 1 (i = 5)
2 4 5 6 8 1 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehen:i = 1...n
Einfügeposition fürElement ibestimmen.Element i einfügen,ggfs. Verschiebungnötig.
199
![Page 109: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/109.jpg)
Sortieren durch Einfugen
5 6 2 8 4 1 (i = 1)
5 6 2 8 4 1 (i = 2)
5 6 2 8 4 1 (i = 3)
2 5 6 8 4 1 (i = 4)
2 5 6 8 4 1 (i = 5)
2 4 5 6 8 1 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehen:i = 1...n
Einfügeposition fürElement ibestimmen.Element i einfügen,ggfs. Verschiebungnötig.
199
![Page 110: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/110.jpg)
Sortieren durch Einfugen
5 6 2 8 4 1 (i = 1)
5 6 2 8 4 1 (i = 2)
5 6 2 8 4 1 (i = 3)
2 5 6 8 4 1 (i = 4)
2 5 6 8 4 1 (i = 5)
2 4 5 6 8 1 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehen:i = 1...n
Einfügeposition fürElement ibestimmen.Element i einfügen,ggfs. Verschiebungnötig.
199
![Page 111: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/111.jpg)
Sortieren durch Einfugen
5 6 2 8 4 1 (i = 1)
5 6 2 8 4 1 (i = 2)
5 6 2 8 4 1 (i = 3)
2 5 6 8 4 1 (i = 4)
2 5 6 8 4 1 (i = 5)
2 4 5 6 8 1 (i = 6)
1 2 4 5 6 8
Iteratives Vorgehen:i = 1...n
Einfügeposition fürElement ibestimmen.Element i einfügen,ggfs. Verschiebungnötig.
199
![Page 112: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/112.jpg)
Sortieren durch Einfugen
? Welchen Nachteil hat der Algorithmus im Vergleich zumSortieren durch Auswahl?
! Im schlechtesten Fall viele Elementverschiebungen.
? Welchen Vorteil hat der Algorithmus im Vergleich zum Sortierendurch Auswahl?! Der Suchbereich (Einfügebereich) ist bereits sortiert.
Konsequenz: binäre Suche möglich.
200
![Page 113: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/113.jpg)
Sortieren durch Einfugen
? Welchen Nachteil hat der Algorithmus im Vergleich zumSortieren durch Auswahl?! Im schlechtesten Fall viele Elementverschiebungen.
? Welchen Vorteil hat der Algorithmus im Vergleich zum Sortierendurch Auswahl?
! Der Suchbereich (Einfügebereich) ist bereits sortiert.Konsequenz: binäre Suche möglich.
200
![Page 114: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/114.jpg)
Sortieren durch Einfugen
? Welchen Nachteil hat der Algorithmus im Vergleich zumSortieren durch Auswahl?! Im schlechtesten Fall viele Elementverschiebungen.
? Welchen Vorteil hat der Algorithmus im Vergleich zum Sortierendurch Auswahl?! Der Suchbereich (Einfügebereich) ist bereits sortiert.
Konsequenz: binäre Suche möglich.
200
![Page 115: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/115.jpg)
Algorithmus: Sortieren durch Einfugen
Input : Array A = (A[1], . . . , A[n]), n ≥ 0.Output : Sortiertes Array Afor i← 2 to n do
x← A[i]p← BinarySearch(A[1...i− 1], x); // Kleinstes p ∈ [1, i] mit A[p] ≥ xfor j ← i− 1 downto p do
A[j + 1]← A[j]
A[p]← x
201
![Page 116: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/116.jpg)
Analyse
Anzahl Vergleiche im schlechtesten Fall:
∑n−1k=1 a · log k = a log((n− 1)!) ∈ O(n log n).
Anzahl Vergleiche im besten Fall: Θ(n log n).4
Anzahl Vertauschungen im schlechtesten Fall:∑n
k=2(k − 1) ∈ Θ(n2)
4Mit leichter Anpassung der Funktion BinarySearch für das Minimum / Maximum: Θ(n)202
![Page 117: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/117.jpg)
Analyse
Anzahl Vergleiche im schlechtesten Fall:∑n−1k=1 a · log k = a log((n− 1)!) ∈ O(n log n).
Anzahl Vergleiche im besten Fall:
Θ(n log n).4
Anzahl Vertauschungen im schlechtesten Fall:∑n
k=2(k − 1) ∈ Θ(n2)
4Mit leichter Anpassung der Funktion BinarySearch für das Minimum / Maximum: Θ(n)202
![Page 118: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/118.jpg)
Analyse
Anzahl Vergleiche im schlechtesten Fall:∑n−1k=1 a · log k = a log((n− 1)!) ∈ O(n log n).
Anzahl Vergleiche im besten Fall: Θ(n log n).4
Anzahl Vertauschungen im schlechtesten Fall:
∑nk=2(k − 1) ∈ Θ(n2)
4Mit leichter Anpassung der Funktion BinarySearch für das Minimum / Maximum: Θ(n)202
![Page 119: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/119.jpg)
Analyse
Anzahl Vergleiche im schlechtesten Fall:∑n−1k=1 a · log k = a log((n− 1)!) ∈ O(n log n).
Anzahl Vergleiche im besten Fall: Θ(n log n).4
Anzahl Vertauschungen im schlechtesten Fall:∑n
k=2(k − 1) ∈ Θ(n2)
4Mit leichter Anpassung der Funktion BinarySearch für das Minimum / Maximum: Θ(n)202
![Page 120: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/120.jpg)
Anderer Blickwinkel
Sortierknoten:
≷4
8
8
4
203
![Page 121: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/121.jpg)
Anderer Blickwinkel
Sortierknoten:
≷8
4
8
4
203
![Page 122: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/122.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
25
6
82
5
42
4
8
12
1
2
5
5
4
2
6
8
5
4
6
5
4
6
5
8
6
5
8
6
6
8
Wie Selection Sort[und wie Bubble Sort]
204
![Page 123: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/123.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
25
6
82
5
42
4
8
12
1
2
5
5
4
2
6
8
5
4
6
5
4
6
5
8
6
5
8
6
6
8
Wie Selection Sort[und wie Bubble Sort]
204
![Page 124: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/124.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
25
6
82
5
42
4
8
12
1
2
5
5
4
2
6
8
5
4
6
5
4
6
5
8
6
5
8
6
6
8
Wie Selection Sort[und wie Bubble Sort]
204
![Page 125: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/125.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
25
6
82
5
42
4
8
12
1
2
5
5
4
2
6
8
5
4
6
5
4
6
5
8
6
5
8
6
6
8
Wie Selection Sort[und wie Bubble Sort]
204
![Page 126: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/126.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
25
6
82
5
42
4
8
12
1
2
5
5
4
2
6
8
5
4
6
5
4
6
5
8
6
5
8
6
6
8
Wie Selection Sort[und wie Bubble Sort]
204
![Page 127: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/127.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
25
6
82
5
42
4
8
12
1
2
5
5
4
2
6
8
5
4
6
5
4
6
5
8
6
5
8
6
6
8
Wie Selection Sort[und wie Bubble Sort]
204
![Page 128: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/128.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
25
6
82
5
42
4
8
12
1
2
5
5
4
2
6
8
5
4
6
5
4
6
5
8
6
5
8
6
6
8
Wie Selection Sort[und wie Bubble Sort]
204
![Page 129: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/129.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
25
6
82
5
42
4
8
12
1
2
5
5
4
2
6
8
5
4
6
5
4
6
5
8
6
5
8
6
6
8
Wie Selection Sort[und wie Bubble Sort]
204
![Page 130: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/130.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
25
6
82
5
42
4
8
12
1
2
5
5
4
2
6
8
5
4
6
5
4
6
5
8
6
5
8
6
6
8
Wie Selection Sort[und wie Bubble Sort]
204
![Page 131: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/131.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
25
6
82
5
42
4
8
12
1
2
5
5
4
2
6
8
5
4
6
5
4
6
5
8
6
5
8
6
6
8
Wie Selection Sort[und wie Bubble Sort]
204
![Page 132: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/132.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
25
6
82
5
42
4
8
12
1
2
5
5
4
2
6
8
5
4
6
5
4
6
5
8
6
5
8
6
6
8
Wie Selection Sort[und wie Bubble Sort]
204
![Page 133: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/133.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
5
6
2 5
2 5
6
8 8 8
2 5 6
8
4 4 5 6
2 4 5 6
8
1 2 4 5 6
1 2 4 5 6
8
Wie Insertion Sort
205
![Page 134: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/134.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
5
6
2 5
2 5
6
8 8 8
2 5 6
8
4 4 5 6
2 4 5 6
8
1 2 4 5 6
1 2 4 5 6
8
Wie Insertion Sort
205
![Page 135: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/135.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
5
6
2 5
2 5
6
8 8 8
2 5 6
8
4 4 5 6
2 4 5 6
8
1 2 4 5 6
1 2 4 5 6
8
Wie Insertion Sort
205
![Page 136: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/136.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
5
6
2 5
2 5
6
8 8 8
2 5 6
8
4 4 5 6
2 4 5 6
8
1 2 4 5 6
1 2 4 5 6
8
Wie Insertion Sort
205
![Page 137: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/137.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
5
6
2 5
2 5
6
8 8 8
2 5 6
8
4 4 5 6
2 4 5 6
8
1 2 4 5 6
1 2 4 5 6
8
Wie Insertion Sort
205
![Page 138: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/138.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
5
6
2 5
2 5
6
8 8 8
2 5 6
8
4 4 5 6
2 4 5 6
8
1 2 4 5 6
1 2 4 5 6
8
Wie Insertion Sort
205
![Page 139: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/139.jpg)
Anderer Blickwinkel5
6 ≷
2 ≷ ≷
8 ≷ ≷ ≷
4 ≷ ≷ ≷ ≷
1 ≷ ≷ ≷ ≷ ≷
1 2 4 5 6 8
5
6
5
6
2 5
2 5
6
8 8 8
2 5 6
8
4 4 5 6
2 4 5 6
8
1 2 4 5 6
1 2 4 5 6
8
Wie Insertion Sort
205
![Page 140: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/140.jpg)
Schlussfolgerung
Selection Sort, Bubble Sort und Insertion Sort sind in gewissemSinne dieselben Sortieralgorithmen. Wird später präzisiert. 5
5Im Teil über parallele Sortiernetzwerke. Für sequentiellen Code gelten natürlich weiterhin die zuvor gemachtenFeststellungen.
206
![Page 141: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/141.jpg)
Shellsort
Insertion Sort auf Teilfolgen der Form (Ak·i) (i ∈ N) mitabsteigenden Abständen k. Letzte Länge ist zwingend k = 1.
Gute Folgen: z.B. Folgen mit Abständen k ∈ {2i3j|0 ≤ i, j}.
207
![Page 142: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/142.jpg)
Shellsort
9 8 7 6 5 4 3 2 1 0
1 8 7 6 5 4 3 2 9 0 insertion sort, k = 4
1 0 7 6 5 4 3 2 9 8
1 0 3 6 5 4 7 2 9 8
1 0 3 2 5 4 7 6 9 8
1 0 3 2 5 4 7 6 9 8 insertion sort, k = 2
1 0 3 2 5 4 7 6 9 8
0 1 2 3 4 5 6 7 8 9 insertion sort, k = 1
208
![Page 143: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/143.jpg)
Shellsort
9 8 7 6 5 4 3 2 1 0
1 8 7 6 5 4 3 2 9 0 insertion sort, k = 4
1 0 7 6 5 4 3 2 9 8
1 0 3 6 5 4 7 2 9 8
1 0 3 2 5 4 7 6 9 8
1 0 3 2 5 4 7 6 9 8 insertion sort, k = 2
1 0 3 2 5 4 7 6 9 8
0 1 2 3 4 5 6 7 8 9 insertion sort, k = 1
208
![Page 144: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/144.jpg)
Shellsort
9 8 7 6 5 4 3 2 1 0
1 8 7 6 5 4 3 2 9 0 insertion sort, k = 4
1 0 7 6 5 4 3 2 9 8
1 0 3 6 5 4 7 2 9 8
1 0 3 2 5 4 7 6 9 8
1 0 3 2 5 4 7 6 9 8 insertion sort, k = 2
1 0 3 2 5 4 7 6 9 8
0 1 2 3 4 5 6 7 8 9 insertion sort, k = 1
208
![Page 145: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/145.jpg)
Shellsort
9 8 7 6 5 4 3 2 1 0
1 8 7 6 5 4 3 2 9 0 insertion sort, k = 4
1 0 7 6 5 4 3 2 9 8
1 0 3 6 5 4 7 2 9 8
1 0 3 2 5 4 7 6 9 8
1 0 3 2 5 4 7 6 9 8 insertion sort, k = 2
1 0 3 2 5 4 7 6 9 8
0 1 2 3 4 5 6 7 8 9 insertion sort, k = 1
208
![Page 146: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/146.jpg)
Shellsort
9 8 7 6 5 4 3 2 1 0
1 8 7 6 5 4 3 2 9 0 insertion sort, k = 4
1 0 7 6 5 4 3 2 9 8
1 0 3 6 5 4 7 2 9 8
1 0 3 2 5 4 7 6 9 8
1 0 3 2 5 4 7 6 9 8 insertion sort, k = 2
1 0 3 2 5 4 7 6 9 8
0 1 2 3 4 5 6 7 8 9 insertion sort, k = 1
208
![Page 147: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/147.jpg)
Shellsort
9 8 7 6 5 4 3 2 1 0
1 8 7 6 5 4 3 2 9 0 insertion sort, k = 4
1 0 7 6 5 4 3 2 9 8
1 0 3 6 5 4 7 2 9 8
1 0 3 2 5 4 7 6 9 8
1 0 3 2 5 4 7 6 9 8 insertion sort, k = 2
1 0 3 2 5 4 7 6 9 8
0 1 2 3 4 5 6 7 8 9 insertion sort, k = 1
208
![Page 148: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/148.jpg)
Shellsort
9 8 7 6 5 4 3 2 1 0
1 8 7 6 5 4 3 2 9 0 insertion sort, k = 4
1 0 7 6 5 4 3 2 9 8
1 0 3 6 5 4 7 2 9 8
1 0 3 2 5 4 7 6 9 8
1 0 3 2 5 4 7 6 9 8 insertion sort, k = 2
1 0 3 2 5 4 7 6 9 8
0 1 2 3 4 5 6 7 8 9 insertion sort, k = 1
208
![Page 149: 6. C++ vertieft (I) - lec.inf.ethz.ch file6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren,](https://reader034.fdocuments.in/reader034/viewer/2022050717/5e1642466c0630724f49f6cf/html5/thumbnails/149.jpg)
Shellsort
9 8 7 6 5 4 3 2 1 0
1 8 7 6 5 4 3 2 9 0 insertion sort, k = 4
1 0 7 6 5 4 3 2 9 8
1 0 3 6 5 4 7 2 9 8
1 0 3 2 5 4 7 6 9 8
1 0 3 2 5 4 7 6 9 8 insertion sort, k = 2
1 0 3 2 5 4 7 6 9 8
0 1 2 3 4 5 6 7 8 9 insertion sort, k = 1
208