Сортировка с проверочными методами - 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("Сортировка работает правильно");
        }
    }
}

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


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

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

9   голосов , оценка 4.222 из 5
Похожие ответы