-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQuickSort(int[])
103 lines (91 loc) · 3.07 KB
/
QuickSort(int[])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
public class QuickSort
{
public static int[] ZufallsListe(int n){ //Erstellung einer Zufallsliste mit der Länge n
int[] liste = new int[n];
int x;
for(int i=0; i<n;i++){
x = (int) Math.floor(n*Math.random()+1);
liste[i] = x;
}
return liste;
}
public static int[] Copy(int[] liste) {
int[] cliste = new int[liste.length];
for(int n=0;n<liste.length;n++){
cliste[n] = liste[n];
}
return cliste;
}
public static void quickSort(int[] liste, int links, int rechts)
{
//Überprüfung, ob die Liste leer oder eine Länge von 0 hat
if (liste == null || liste.length == 0){
return;
}
if (links >= rechts){
return;
}
//Ermittlung des Pivot-Elements aus der Mitte der Liste
int mitte = links + (rechts - links) / 2;
int pivot = liste[mitte];
//Macht "links" kleiner als das Pivot-Element und "rechts" größer als das Pivot-Element
int i = links;
int j = rechts;
while (i <= j)
{
//Überprüfung, bis alle Werte auf der linken Seite der Liste niedriger als das Pivot-Element sind
while (liste[i] < pivot)
{
i++;
}
//Überprüfung, bis alle Werte auf der rechten Seite der Liste größer als das Pivot-Element sind
while (liste[j] > pivot)
{
j--;
}
//Vergleich der Werte auf beiden Seiten der Liste, um festzustellen, ob sie getauscht werden müssen
if (i <= j)
{
Tauschen(liste, i, j);
i++;
j--;
}
}
//Ausführung der selben Methode, um zwei Unterlisten zu sortieren
if (links < j){
quickSort(liste, links, j);
}
if (rechts > i){
quickSort(liste, i, rechts);
}
}
public static void Tauschen (int[] liste, int a, int b) //Tauscht die Werte an der Indexposition a und b
{
int temp = liste[a];
liste[a] = liste[b];
liste[b] = temp;
}
public static void Ausgabe(int[] liste) {
System.out.print("{");
for (int i =0; i<liste.length-1;i++) {
System.out.print(liste[i]+", ");
}
System.out.println(liste[liste.length-1]+"}");
}
public static void main(String[] args)
{
System.out.println("Listenlänge: | Zeit(ms):");
for(int n=0;n<50001;n=n+1000){
//Erstellung einer Zufallsliste mit der Länge n
int[] liste = ZufallsListe(n);
//Erstellung einer Kopie der Liste
int [] liste2 = Copy(liste);
long start = System.currentTimeMillis();
//Sortiert die Liste
quickSort(liste, 0, liste.length - 1 );
long ende = System.currentTimeMillis();
System.out.println(n+" | "+(ende-start));
}
//Ausgabe(liste);
}
}