Алгоритм быстрой сортировки с повторяющимися значениями - PullRequest
0 голосов
/ 09 января 2020

Я пытался создать алгоритм быстрой сортировки в C#, используя онлайн-уроки. Но так как я рандомизирую свой массив, я получаю повторяющиеся значения, и когда есть повторяющиеся значения, программа не распечатывает окончательный отсортированный массив. Я не могу понять, как заставить это работать. Я попытался поместить утверждение, если два значения совпадают, чтобы вывести правильное, но это, похоже, не работает. Как я могу заставить программу обрабатывать повторяющиеся значения и выводить окончательно отсортированный массив?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace quicksort
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] a;
            int n = 11;
            a = new int[n];
            Random r = new Random();

            for (int i = 0; i < n; i++)
                a[i] = r.Next(1, 100);

            Console.WriteLine("The original array is:");
            for (int i = 0; i < n; i++)
            {
                Console.Write(" " + a[i]);
            }

            Console.Read();

            Console.WriteLine();

            Console.WriteLine("The sorted array is: ");
            QuickSort_Recursive(a, 0, n - 1);
            for (int i = 0; i < n; i++)
            {
                Console.Write(" " + a[i]); 
            }

            Console.Read();
        }

        static public int Partition(int[] a, int left, int right)
        {
            int pivot = a[left];

            while (true)
            {
                while (a[++left] < pivot)
                    left++;

                while (a[right] > pivot)
                    right--;

                if (left < right)
                {
                    int temp = a[right];
                    a[right] = a[left];
                    a[left] = temp;
                }
                else
                {
                    return right;
                }
            }
        }

        static public void QuickSort_Recursive(int[] a, int left, int right)
        {
            // For Recursion
            if (left < right)
            {
                int pivot = Partition(a, left, right);

                if (pivot > 1)
                    QuickSort_Recursive(a, left, pivot - 1);

                if (pivot + 1 < right)
                    QuickSort_Recursive(a, pivot + 1, right);
            }
            if (a[left] == a[right]) 
                return right;
        }
    }
}
...