Быстрая сортировка №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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д