Быстрая сортировка - C# (177090)

Узнай цену своей работы

Формулировка задачи:

Доброе время суток! Помогите мне пожалуйста, вот пытаюсь разобрать быструю сортировку, но никак не могу понять, как мы выбираем опорный элемент особенно не ясно, зачем мы приплюсовываем first, ведь, если мы ищем средний, то достаточно поделить на 2, самое странное, что без него даже прога не хочет работать. В общем, помогите пожалуйста понять
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
    class QuickSorting
    {
        public static void sorting(double[] arr, long first, long last)
        {
            double p = arr[(last - first) / 2 + first];// ищем средний элемент
            double temp;
            long i = first, j = last;
            while (i <= j)
            {
                while (arr[i] < p && i <= last) ++i;
                while (arr[j] > p && j >= first) --j;
                if (i <= j)
                {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                    ++i; --j;
                }
            }
            if (j > first) sorting(arr, first, j);
            if (i < last) sorting(arr, i, last);
        }
    }
 
    class Test
    {
        static void Main(string[] args)
        {
            double[] arr = new double[10];//указываем кол-во элементов массива
 
            //заполняем массив случайными числами
            Random rd = new Random();
            for (int i = 0; i < arr.Length; ++i)
            {
                arr[i] = rd.Next(1, 101);
            }
            System.Console.WriteLine("The array before sorting:");
            foreach (double x in arr)
            {
                System.Console.Write(x + " ");
            }
 
            //сортировка
            QuickSorting.sorting(arr, 0, arr.Length - 1);
            System.Console.WriteLine("\n\nThe array after sorting:");
            foreach (double x in arr)
            {
                System.Console.Write(x + " ");
            }
            System.Console.WriteLine("\n\nPress the <Enter> key");
            System.Console.ReadLine();
        }
    }
}

Решение задачи: «Быстрая сортировка»

textual
Листинг программы
using System;
using System.Linq;
using System.Collections.Generic;
 
class Program
{
    private static IEnumerable<double> QuickSort(IEnumerable<double> en)
    {
        if (!en.Any() || !en.Skip(1).Any()) return en;
        double first = en.First();
        ILookup<int, double> lookup = en.ToLookup(x => x.CompareTo(first));
        return QuickSort(lookup[-1]).Concat(lookup[0]).Concat(QuickSort(lookup[1]));
    }
 
    public static void Main()
    {
        foreach (double x in QuickSort(Enumerable.Repeat(new Random(), 20).Select(r => r.NextDouble())))
        {
            Console.WriteLine(x);
        }
    }
}

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


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

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

6   голосов , оценка 3.833 из 5