Быстрая сортировка №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);
        }

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


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

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

10   голосов , оценка 4 из 5