Быстрая сортировка №2. Бесконечный цикл - C#
Формулировка задачи:
Опорный элемент - полусумма минимального и максимального элементов.
Ошибка - бесконечный цикл/рекурсия. В чём проблема не знаю(
Где сумма , это:
static private void QuickSort(Inforamtion[] arr,int l,int r, int summa)
{
Inforamtion temp = new Inforamtion();
int i = l;
int j = r;
while (i <= j)
{
while (arr[i].Year < summa && i<=r) i++;
while (arr[j].Year > summa && j>=l) j--;
if (i <= j)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if (i < r)
QuickSort(arr, i, r,summa);
if (l < j)
QuickSort(arr, l, j,summa);
}int min = info[0].Year; int max = info[0].Year; int summa;
for (int z = 0; z < info.Length - 1; z++)
{
if (info[z].Year > info[z + 1].Year)
{
min = info[z + 1].Year;
}
if (info[z].Year < info[z + 1].Year)
{
max = info[z + 1].Year;
}
}
summa = (min+max)/2;Решение задачи: «Быстрая сортировка №2. Бесконечный цикл»
textual
Листинг программы
static private void QuickSort(Inforamtion[] arr,int l,int r)
{
int min = arr[l].Year, max = arr[l].Year;
while(l<r)
{
if (arr[l].Year<min)
{
min = arr[l].Year;
}
if (arr[l].Year>max)
{
max = arr[l].Year;
}
l++;
}
int ps = (min + max) / 2;
Inforamtion temp = new Inforamtion();
int i = l;
int j = r;
while (i <= j)
{
while (arr[i].Year < ps) i++;//&& i<=r
while (arr[j].Year > ps) j--;//&& j>=l
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);
}