Быстрая сортировка. Бесконечный цикл - C#
Формулировка задачи:
Реализовал алгоритм быстрой сортировки. Но нужно учесть , что опорный элемент является полусумма минимального и максимального элементов в массиве.
Но компил жалуется на бесконечный цикл. Не могу понять, где ошибка.
static void QuickSort(Inforamtion[] arr,int l,int r)
{
int min = arr[0].Year; int max = arr[0].Year; int summa;
for (int z = 0; z < arr.Length - 1; z++)
{
if (arr[z].Year > arr[z + 1].Year)
{
min = arr[z + 1].Year;
}
if (arr[z].Year < arr[z + 1].Year)
{
max = arr[z + 1].Year;
}
}
summa = (min + max) / 2;
Inforamtion temp = new Inforamtion();
int i = l;
int j = r;
while (i <= j)
{
while (arr[i].Year < summa) i++;
while (arr[j].Year > summa) j--;
if (i <= j)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if (i < r)
QuickSort(arr, i, r);
if (l < j)
QuickSort(arr, l, j);
}Решение задачи: «Быстрая сортировка. Бесконечный цикл»
textual
Листинг программы
static void QuickSort(Inforamtion[] arr,int l,int r)
{
int min = arr[l].Year; int max = arr[r].Year; int summa;
for (int z = l; z < r; z++)
{
if (arr[z].Year > arr[z + 1].Year)
{
min = arr[z + 1].Year;
}
if (arr[z].Year < arr[z + 1].Year)
{
max = arr[z + 1].Year;
}
}
summa = (int)Math.Round((min + max) / 2d);
Inforamtion temp = new Inforamtion();
int i = l;
int j = r;
while (i <= j)
{
while (arr[i].Year < summa) i++;
while (arr[j].Year > summa) j--;
if (i <= j)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if (i < r)
QuickSort(arr, i, r);
if (l < j)
QuickSort(arr, l, j);
}