Быстрая сортировка. Бесконечный цикл - 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);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5