Это утомленная проблема, я реализовал простую быструю сортировку следующим образом.
static void Main(string[] args)
{
List<int> unsorted = new List<int> { 1, 3, 5, 7, 9, 8, 6, 4, 2 };
List<int> sorted = quicksort(unsorted);
Console.WriteLine(string.Join(",", sorted));
Console.ReadKey();
}
private static List<T> quicksort<T>(List<T> arr) where T : IComparable<T>
{
List<T> loe = new List<T>(), gt = new List<T>();
if (arr.Count < 2)
return arr;
int pivot = arr.Count / 2;
T pivot_val = arr[pivot];
arr.RemoveAt(pivot);
foreach (T i in arr)
{
if (i.CompareTo(pivot_val) <= 0)
loe.Add(i);
else
gt.Add(i);
}
List<T> resultSet = new List<T>();
resultSet.AddRange(quicksort(loe));
gt.Add(pivot_val);
resultSet.AddRange(quicksort(gt));
return resultSet;
}
Вывод: 1,2,3,4,5,6,7,8,9
Но когда я использую любое отрицательное число в несортированном списке, возникает ошибка переполнения стека,
например
если список не отсортирован = новый список {1, 3, 5, 7, 9, 8, 6, 4, 2, -1 };
Теперь есть переполнение стека ..
Что происходит? Почему это не работает?