81 lines
2.6 KiB
C#
81 lines
2.6 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Diagnostics;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
|
|||
|
namespace Alg;
|
|||
|
class Program // БЫСТРАЯ СОРТИРОВКА (В лучшем случае O(n*log(n)), в худшем O(n^2))
|
|||
|
{
|
|||
|
static void Main(string[] args)
|
|||
|
{
|
|||
|
int[] myArray = randomGenerate(10, 1, 100); // Создаем массив из 10000 элементов со значениями от 1 до 1000000
|
|||
|
|
|||
|
Console.WriteLine("Исходный массив:");
|
|||
|
printArray(myArray); // Выводим массив на экран
|
|||
|
|
|||
|
quickSort(myArray, 0, myArray.Length - 1); // Сортируем массив быстрой сортировкой
|
|||
|
Console.WriteLine("Отсортированный массив:");
|
|||
|
printArray(myArray); // Выводим отсортированный массив на экран
|
|||
|
}
|
|||
|
|
|||
|
static int[] randomGenerate(int size, int minValue, int maxValue)
|
|||
|
{
|
|||
|
Random rnd = new Random();
|
|||
|
int[] array = new int[size];
|
|||
|
for (int i = 0; i < size; i++)
|
|||
|
{
|
|||
|
array[i] = rnd.Next(minValue, maxValue + 1); // Генерируем случайное число от minValue до maxValue
|
|||
|
}
|
|||
|
return array;
|
|||
|
}
|
|||
|
|
|||
|
static void printArray(int[] array)
|
|||
|
{
|
|||
|
foreach (int num in array)
|
|||
|
{
|
|||
|
Console.Write(num + " ");
|
|||
|
}
|
|||
|
Console.WriteLine();
|
|||
|
}
|
|||
|
|
|||
|
static void quickSort(int[] array, int low, int high)
|
|||
|
{
|
|||
|
if (low < high)
|
|||
|
{
|
|||
|
int pivotIndex = partition(array, low, high);
|
|||
|
|
|||
|
// Рекурсивно сортируем элементы до и после опорного элемента
|
|||
|
quickSort(array, low, pivotIndex - 1);
|
|||
|
quickSort(array, pivotIndex + 1, high);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static int partition(int[] array, int low, int high)
|
|||
|
{
|
|||
|
int pivot = array[high];
|
|||
|
int i = low - 1; // Индекс меньшего элемента
|
|||
|
|
|||
|
for (int j = low; j < high; j++)
|
|||
|
{
|
|||
|
// Если текущий элемент меньше или равен опорному
|
|||
|
if (array[j] <= pivot)
|
|||
|
{
|
|||
|
i++;
|
|||
|
|
|||
|
// Обмен значениями
|
|||
|
int temp = array[i];
|
|||
|
array[i] = array[j];
|
|||
|
array[j] = temp;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Обмен значениями
|
|||
|
int temp1 = array[i + 1];
|
|||
|
array[i + 1] = array[high];
|
|||
|
array[high] = temp1;
|
|||
|
|
|||
|
return i + 1;
|
|||
|
}
|
|||
|
}
|