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;
|
||
}
|
||
} |