Merge branch 'master' of manuel-voegele.de:inf3

This commit is contained in:
Daniel Herrmann
2014-05-22 11:59:23 +02:00
2 changed files with 50 additions and 0 deletions

49
src/Quicksort.cs Normal file
View File

@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
namespace WorldOfPeacecraft
{
public class Quicksort<T>
{
public static void sort (IList<T> list, Func<T, T, bool> isSmaller)
{
if (list.Count != 0) {
sort (list, 0, list.Count - 1, isSmaller);
}
}
private static void sort (IList<T> list, int startIndex, int endIndex, Func<T, T, bool> isSmaller)
{
T tmp;
if (endIndex - startIndex <= 0) {
return;
}
int pivot = endIndex;
int rechts = endIndex - 1;
int links = startIndex;
while (links < rechts) {
while (isSmaller(list[links], list[pivot]) && links < rechts) {
links++;
}
while (isSmaller(list[pivot], list[rechts]) && rechts > links) {
rechts--;
}
if (isSmaller (list [rechts], list [links]) && links < rechts) {
tmp = list [links];
list [links] = list [rechts];
list [rechts] = tmp;
links++;
}
}
if (isSmaller (list [links], list [pivot])) {
links++;
}
tmp = list[links];
list[links] = list[pivot];
list[pivot] = tmp;
pivot = links;
sort (list, startIndex, pivot - 1, isSmaller);
sort (list, pivot + 1, endIndex, isSmaller);
}
}
}