Я пытался создать алгоритм быстрой сортировки в 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;
}
}
}