Pascal Schärli 11.12.2020
aufsteigend vorsortiert
absteigend vorsortiert
gut durchmischt
[1, 2, 3, 4, 5, 6, 7]
[4, 3, 6, 7, 1, 2, 5]
[7, 6, 5, 4, 3, 2, 1]
worst case:
\(O(n^2)\)
worst case:
\(O(n^2)\)
best & average case:
\(O(n \cdot log_2(n))\)
Pascal Schärli 11.12.2020
// Fragment 6
for (int i=0; i<n; i++)
for (int j=0; j<n*n; j++)
for (int k=0; k<j; k++)
a++;
Pascal Schärli 11.12.2020
Pascal Schärli 11.12.2020
Pascal Schärli 11.12.2020
2
3
5
11
6
Pascal Schärli 11.12.2020
1
4
5
7
11
6
12
9
3
4
8
5
Element einfügen
2
Pascal Schärli 11.12.2020
1
4
5
7
11
6
12
9
3
4
8
5
2
Element einfügen
Pascal Schärli 11.12.2020
1
4
5
7
11
6
12
9
3
4
8
5
2
Element einfügen
Pascal Schärli 11.12.2020
1
4
5
7
11
6
12
9
3
4
8
5
2
Element einfügen
Pascal Schärli 11.12.2020
1
4
5
7
11
6
12
9
3
4
8
5
2
Wurzel entfernen
1
4
Pascal Schärli 11.12.2020
1
4
5
7
11
6
12
9
3
4
8
5
2
Wurzel entfernen
1
4
Pascal Schärli 11.12.2020
2
4
5
7
11
6
12
9
3
4
8
5
2
Wurzel entfernen
1
4
Pascal Schärli 11.12.2020
2
4
5
7
11
6
12
9
3
4
8
5
3
Wurzel entfernen
1
4
Pascal Schärli 11.12.2020
2
4
5
7
11
6
12
9
4
8
5
3
Wurzel entfernen
1
Pascal Schärli 11.12.2020
Pascal Schärli 11.12.2020
Wie schon in der Übung 2 gelernt haben, lässt sich ein Binärbaum in einem Array darstellen.
Â
Somit kann man einen Array ohne zusätzlichen Speicherplatz sortieren:
Zuerst erstellen wir eine Heapstruktur im Array
Danach können wir immer das grösste bzw kleinste Element aus dem Heap entfernen
Pascal Schärli 11.12.2020
7
3
9
1
2
Pascal Schärli 11.12.2020
7
3
9
1
2
unstrukturiert
im heap
sortiert
7
3
9
1
2
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
7
3
9
1
2
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
7
3
1
2
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
9
unstrukturiert
im heap
sortiert
7
3
9
1
2
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
7
3
9
1
2
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
7
3
9
1
2
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
unstrukturiert
im heap
sortiert
7
3
9
1
2
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
7
3
9
1
2
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
7
3
9
1
2
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
7
3
9
2
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
1
7
3
9
2
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
7
3
9
2
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
7
3
9
2
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
7
3
9
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
7
9
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
7
9
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
9
Pascal Schärli 11.12.2020
7
3
9
1
2
min heap (nur als visualisierung vom Array)
unstrukturiert
im heap
sortiert
Pascal Schärli 11.12.2020
Pascal Schärli 11.12.2020
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 5; i++){
new Worker().start();
}
System.out.println("Done!");
}
}
public class Worker extends Thread {
static int j = 0;
int k;
@Override
public void run() {
for (int i = 0; i < 4000000; i++) {
j++;
k++;
}
System.out.println("k: " + k + " j:" + j);
}
}
Done!
k: 4‘000‘000, j: 3‘752‘884 k: 4‘000‘000, j: 10‘806‘936 k: 4‘000‘000, j: 7‘307‘897 k: 4‘000‘000, j: 5‘322‘116 k: 4‘000‘000, j: 4‘366‘084
Pascal Schärli 11.12.2020
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 5; i++){
new Worker().start();
}
System.out.println("Done!");
}
}
public class Worker extends Thread {
static int j = 0;
int k;
static Object lock = new Object();
@Override
public void run() {
for (int i = 0; i < 4000000; i++) {
synchronized(lock){
j++;
k++;
}
}
System.out.println("k: " + k + " j:" + j);
}
}
Done! k: 4‘000‘000, j: 15‘786‘100 k: 4‘000‘000, j: 18‘432‘690 k: 4‘000‘000, j: 19‘344‘207 k: 4‘000‘000, j: 19‘408‘717 k: 4‘000‘000, j: 20‘000‘000
Pascal Schärli 11.12.2020
public static void main(String[] args) {
Worker workers[] = new Worker[5];
for (int i = 0; i < 5; i++) {
workers[i] = new Worker();
workers[i].start();
}
for (int i = 0; i < 5; i++) {
try {
workers[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Done!");
}
k: 4‘000‘000, j: 15‘786‘100 k: 4‘000‘000, j: 18‘432‘690 k: 4‘000‘000, j: 19‘344‘207 k: 4‘000‘000, j: 19‘408‘717 k: 4‘000‘000, j: 20‘000‘000 Done!
Pascal Schärli 11.12.2020
Pascal Schärli 11.12.2020
Pascal Schärli 11.12.2020
Pascal Schärli 11.12.2020
Pascal Schärli 11.12.2020
public Worker(MergeSort sort, int[] items, int threadCount, int begin, int end) {
this.sort = sort;
this.items = items;
this.threadCount = threadCount;
this.begin = begin;
this.end = end;
}
@Override
public void run() {
if(threadCount <= 1)
// Call Mergesort function from Exercise 10
else {
// 1. Divde array into two parts
// 2. Create a new worker for left half
// 3. Create a new worker for right half
// 4. Wait for both workers to finish
// 5. Merge results of both workers and store it in sortedItems
}
}
public int[] getResult() {
return sortedItems;
}
Pascal Schärli 11.12.2020
Pascal Schärli 11.12.2020
Pascal Schärli 11.12.2020
Ich freue mich euch am Reversi Tournier und am PVK nochmals zu treffen.
Pascal Schärli 11.12.2020