master
SimonDHG 2023-11-15 11:09:22 +01:00
parent 0f90ace1f1
commit 9481182d93
1 changed files with 117 additions and 0 deletions

117
QuickSort.java Normal file
View File

@ -0,0 +1,117 @@
/**
* Beschreiben Sie hier die Klasse QuickSort.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
import java.util.Random;
public class QuickSort
{
static Random r = new Random();
static int[] a = new int[10000000];
// gibt eine zufällige Zahl von 1-50 zurück
public static int Zufallszahl(){
return r.nextInt(100000 );
}
public static void main(){
// array mit 20 zufallszahlen von 1-50 belegen
for (int i = 0; i < a.length; i++){
a[i] = Zufallszahl();
}
/* ausgeben des arrays "a"
for (int i = 0; i < a.length; i++){
System.out.print(a[i]);
System.out.print(",");
}
*/
// absatz
System.out.println();
long start = System.currentTimeMillis();
qi(a, 0, a.length -1);
long ende = System.currentTimeMillis();
/* ausgeben des arrays "a"
for (int i = 0; i < a.length; i++){
System.out.print(a[i]);
System.out.print(",");
}
*/ System.out.println();
System.out.println(ende - start);
}
public static int[] q(int[] a){
// 0. Abbrruchbedingung
if (a.length < 2) return a;
// 1. Pivot
int pivot = a[a.length -1];
// 2. Elemente kleiner als Pivot zählen
int kleiner = 0;
for (int i = 0; i < a.length - 1; i++){
if (a[i] < pivot ) kleiner++;
}
// 3. Arrays erstellen
int[] links = new int[kleiner];
int[] rechts = new int[a.length - kleiner -1];
// 4. Arrays befüllen
int r = 0;
int l = 0;
for (int i = 0; i< a.length - 1; i ++){
if (a[i] < pivot){
links[l] = a[i];
l++;
}
else{
rechts[r] = a[i];
r++;
}
}
// 5. Arrays rekursiv sortieren
links = q(links);
rechts = q(rechts);
// 6. Zusammensetzen
for (int i = 0 ; i < links.length; i ++){
a [i] = links[i];
}
a[links.length] = pivot;
for (int i = 0; i < rechts.length; i++){
a[links.length + i + 1]= rechts[i];
}
return a;
}
public static int[] qi(int [] a, int l , int r){
//Abrruchbedingung
if (r-l < 2) return a;
// pivot
int pivot = a[r];
int i = l;
int j = r -1;
// vertauschen
while (i < j){
if (a[i] < pivot) i++;
if (a[j] >= pivot) j--;
if (a[i] >= pivot && a[j] < pivot){
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
// pivot an richtige Stelle
int stelle = 0;
if (a[i] > pivot) {
a[r] = a[i];
a[i] = pivot;
stelle = i;
}
else {
a[r] = a[i +1];
a[i+1] = pivot;
stelle = i+1;
}
// rekursiver Aufruf
qi(a, l, stelle - 1);
qi(a, stelle + 1 , r);
return a;
}
}