Kann jemand mir helfen, ob ich die Implementierung richtig gemacht habe.
Das ist mein Code:
/** Alternative Implementierung zweier Sortierverfahren. */
public class Sort
{
/**
* Sortieren durch Einfügen entsprechend der natürlichen Ordnung der
* Elemente eines Arrays.
* Das Suchen nach der Einfügestelle hat hier nur den Aufwand O(log N).
* Das Verschieben hat aber weiterhin den Aufwand O(N).
* @param a Das Array, das sortiert wird.
* @param <T> Der Typ der Elemente des Arrays.
*/
public static <T extends Comparable<T>> void insertionSort(final T[] a)
{
// Implementierung hier einfügen
if(a== null || a.length== 0 || a.length == 1)
return;
insertionSort(a, 0, a.length -1);
}
private static <T extends Comparable<T>> int findInsertionPoint(T[] a, int leftIndex, int rightIndex)
{
int i = leftIndex;
int j = rightIndex;
if (rightIndex <= leftIndex)
return -1; // Ersetzen
}
/**
* QuickSort entsprechend der natürlichen Ordnung der Elemente eines
* Arrays.
* @param a Das Array, das sortiert wird.
* @param <T> Der Typ der Elemente des Arrays.
*/
public static <T extends Comparable<T>> void quickSort(final T[] a)
{
// Implementierung u.a. hier einfügen
quickSort(a, 0, a.length-1);
}
private static <T extends Comparable<T>> void quickSort( final T[]a, int leftIndex, int rightIndex) {
if (rightIndex > leftIndex) {
int pivot = selectPivot( a,leftIndex,rightIndex);
quickSort(a,leftIndex,pivot-1);
quickSort(a,pivot+1,rightIndex);
}
}
}
private static <T extends Comparable<T>> T selectPivot(T[]a, int leftIndex, int rightIndex )
{
T pivot = a[rightIndex];
int mid = leftIndex;
for (int i=mid; i< rightIndex; i++){
if (a.compareTo(pivot)<=0){
swap(a, i, mid++);
}
}
swap(a, rightIndex, mid);
return mid; // Ersetzen
}
/**
* Tauscht zwei Elemente eines Arrays aus.
* @param a Das Array, in dem die beiden Elemente getauscht werden.
* @param i Der Index des einen Elements.
* @param j Der Index des anderen Elements.
*/
private static void swap(final Object[] a, final int i, final int j)
{
final Object temp = a;
a = a[j];
a[j] = temp;
}
}
Das ist mein Code:
/** Alternative Implementierung zweier Sortierverfahren. */
public class Sort
{
/**
* Sortieren durch Einfügen entsprechend der natürlichen Ordnung der
* Elemente eines Arrays.
* Das Suchen nach der Einfügestelle hat hier nur den Aufwand O(log N).
* Das Verschieben hat aber weiterhin den Aufwand O(N).
* @param a Das Array, das sortiert wird.
* @param <T> Der Typ der Elemente des Arrays.
*/
public static <T extends Comparable<T>> void insertionSort(final T[] a)
{
// Implementierung hier einfügen
if(a== null || a.length== 0 || a.length == 1)
return;
insertionSort(a, 0, a.length -1);
}
private static <T extends Comparable<T>> int findInsertionPoint(T[] a, int leftIndex, int rightIndex)
{
int i = leftIndex;
int j = rightIndex;
if (rightIndex <= leftIndex)
return -1; // Ersetzen
}
/**
* QuickSort entsprechend der natürlichen Ordnung der Elemente eines
* Arrays.
* @param a Das Array, das sortiert wird.
* @param <T> Der Typ der Elemente des Arrays.
*/
public static <T extends Comparable<T>> void quickSort(final T[] a)
{
// Implementierung u.a. hier einfügen
quickSort(a, 0, a.length-1);
}
private static <T extends Comparable<T>> void quickSort( final T[]a, int leftIndex, int rightIndex) {
if (rightIndex > leftIndex) {
int pivot = selectPivot( a,leftIndex,rightIndex);
quickSort(a,leftIndex,pivot-1);
quickSort(a,pivot+1,rightIndex);
}
}
}
private static <T extends Comparable<T>> T selectPivot(T[]a, int leftIndex, int rightIndex )
{
T pivot = a[rightIndex];
int mid = leftIndex;
for (int i=mid; i< rightIndex; i++){
if (a.compareTo(pivot)<=0){
swap(a, i, mid++);
}
}
swap(a, rightIndex, mid);
return mid; // Ersetzen
}
/**
* Tauscht zwei Elemente eines Arrays aus.
* @param a Das Array, in dem die beiden Elemente getauscht werden.
* @param i Der Index des einen Elements.
* @param j Der Index des anderen Elements.
*/
private static void swap(final Object[] a, final int i, final int j)
{
final Object temp = a;
a = a[j];
a[j] = temp;
}
}