Сортировка с проверочными методами - C#
Формулировка задачи:
Не вызываются методы, есть ошибка с бесконечным циклом
как исправить?
Листинг программы
- class Program
- {
- static void Main(string[] args)
- {
- TestMethod1();
- Tests100Numbers();
- //CheckIsSorted();
- Tests1000Numbers();
- TestEmpty();
- TestBig();
- }
- public static void QuickSort(int[] array, int l, int r)
- {
- r = array.Length - 1;
- l = 0;
- int temp;
- int x = array[l + (r - l) / 2];
- //запись эквивалентна (l+r)/2,
- //но не вызввает переполнения на больших данных
- int i = l;
- int j = r;
- //код в while обычно выносят в процедуру particle
- while (i <= j)
- {
- while (array[i] < x) i++;
- while (array[j] > x) j--;
- if (i <= j)
- {
- temp = array[i];
- array[i] = array[j];
- array[j] = temp;
- i++;
- j--;
- }
- }
- if (i < r)
- QuickSort(array, i, r);
- if (l < j)
- QuickSort(array, l, j);
- }
- public static void TestMethod1()
- {
- var array = new[] { 3, 2, 1 };
- int r = array.Length - 1;
- int l = 0;
- QuickSort(array, l, r);
- if (array[1] < array[0]|| array[2] < array[1])
- {
- Console.WriteLine("Второй элемент не больше первого");
- }
- else
- {
- Console.WriteLine("Сортировка выполнена правильно");
- }
- }
- public static void Tests100Numbers()
- {
- var array = new int[100];
- int r = array.Length - 1;
- int l = 0;
- for (int i = 0; i < 100; i++)
- {
- array[i] = 42;
- }
- QuickSort(array, l, r);
- sbyte c = 0;
- for (int i = 1; i < 100; i++)
- {
- if (array[i] < array[i - 1])
- c++;
- }
- if (c != 0)
- {
- Console.WriteLine("Сортировка работает неправильно");
- }
- else
- {
- Console.WriteLine("Сортировка работает правильно");
- }
- }
- public static void CheckIsSorted(int[] array)
- {
- sbyte c = 0;
- for (int i = 0; i < array.Length - 1; i++)
- {
- if (array[i] < array[i - 1])
- c++;
- }
- if (c != 0)
- {
- Console.WriteLine("Сортировка работает неправильно");
- }
- else
- {
- Console.WriteLine("Сортировка работает правильно");
- }
- }
- public static void Tests1000Numbers()
- {
- Random rnd = new Random();
- var array = new int[1000];
- int r = array.Length - 1;
- int l = 0;
- for (int i = 0; i < 1000; i++)
- {
- array[i] = rnd.Next();
- }
- QuickSort(array, l, r);
- for (int i = 0; i < 10; i++)
- {
- int left = 0, right = 0;
- left = rnd.Next(1000);
- while (left == right)
- right = rnd.Next(1000);
- if (right < left)
- {
- var tmp = left;
- left = right;
- right = tmp;
- }
- if (array[left] > array[right])
- {
- Console.WriteLine("Сортировка работает неправильно");
- }
- else
- {
- Console.WriteLine("Сортировка работает правильно");
- }
- }
- }
- public static void TestEmpty()
- {
- var array = new int[0];
- int r = array.Length - 1;
- int l = 0;
- QuickSort(array, l, r);
- Console.WriteLine();
- }
- public static void TestBig()
- {
- var array = new int[50000];
- int r = array.Length - 1;
- int l = 0;
- QuickSort(array, l, r);
- sbyte c = 0;
- for (int i = 1; i < 50000; i++)
- {
- if (array[i] < array[i - 1])
- c++;
- }
- if (c != 0)
- {
- Console.WriteLine("Сортировка работает неправильно");
- }
- else
- {
- Console.WriteLine("Сортировка работает правильно");
- }
- }
- }
Решение задачи: «Сортировка с проверочными методами»
textual
Листинг программы
- using System;
- class Program
- {
- static void Main(string[] args)
- {
- TestMethod1();
- Tests100Numbers();
- //CheckIsSorted();
- Tests1000Numbers();
- TestEmpty();
- TestBig();
- }
- public static void QuickSort(int[] array)
- {
- if (array.Length < 2) return;
- QuickSortInner(array, 0, array.Length - 1);
- }
- private static void QuickSortInner(int[] array, int l, int r)
- {
- int x = array[l + (r - l) / 2];
- //запись эквивалентна (l+r)/2,
- //но не вызввает переполнения на больших данных
- int i = l;
- int j = r;
- //код в while обычно выносят в процедуру particle
- while (i <= j)
- {
- while (array[i] < x) i++;
- while (array[j] > x) j--;
- if (i <= j)
- {
- int temp = array[i];
- array[i] = array[j];
- array[j] = temp;
- i++;
- j--;
- }
- }
- if (i < r)
- QuickSortInner(array, i, r);
- if (l < j)
- QuickSortInner(array, l, j);
- }
- public static void TestMethod1()
- {
- var array = new[] { 3, 2, 1 };
- QuickSort(array);
- if (array[1] < array[0] || array[2] < array[1])
- {
- Console.WriteLine("Второй элемент не больше первого");
- }
- else
- {
- Console.WriteLine("Сортировка выполнена правильно");
- }
- }
- public static void Tests100Numbers()
- {
- var array = new int[100];
- for (int i = 0; i < 100; i++)
- {
- array[i] = 42;
- }
- QuickSort(array);
- sbyte c = 0;
- for (int i = 1; i < 100; i++)
- {
- if (array[i] < array[i - 1])
- c++;
- }
- if (c != 0)
- {
- Console.WriteLine("Сортировка работает неправильно");
- }
- else
- {
- Console.WriteLine("Сортировка работает правильно");
- }
- }
- public static void CheckIsSorted(int[] array)
- {
- sbyte c = 0;
- for (int i = 0; i < array.Length - 1; i++)
- {
- if (array[i] < array[i - 1])
- c++;
- }
- if (c != 0)
- {
- Console.WriteLine("Сортировка работает неправильно");
- }
- else
- {
- Console.WriteLine("Сортировка работает правильно");
- }
- }
- public static void Tests1000Numbers()
- {
- Random rnd = new Random();
- var array = new int[1000];
- for (int i = 0; i < 1000; i++)
- {
- array[i] = rnd.Next();
- }
- QuickSort(array);
- for (int i = 0; i < 10; i++)
- {
- int left = 0, right = 0;
- left = rnd.Next(1000);
- while (left == right)
- right = rnd.Next(1000);
- if (right < left)
- {
- var tmp = left;
- left = right;
- right = tmp;
- }
- if (array[left] > array[right])
- {
- Console.WriteLine("Сортировка работает неправильно");
- }
- else
- {
- Console.WriteLine("Сортировка работает правильно");
- }
- }
- }
- public static void TestEmpty()
- {
- var array = new int[0];
- QuickSort(array);
- Console.WriteLine();
- }
- public static void TestBig()
- {
- var array = new int[50000];
- QuickSort(array);
- sbyte c = 0;
- for (int i = 1; i < 50000; i++)
- {
- if (array[i] < array[i - 1])
- c++;
- }
- if (c != 0)
- {
- Console.WriteLine("Сортировка работает неправильно");
- }
- else
- {
- Console.WriteLine("Сортировка работает правильно");
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д