using System; using System.Text; using System.Text.RegularExpressions; public static class ThanosMeanLessMemory { // --- int[] --- public static void ThanosIntSortInPlace(int[] a) { if (a == null || a.Length < 2) return; var sorted = SortNoExtraCopy(a); Array.Copy(sorted, a, a.Length); } private static int[] SortNoExtraCopy(int[] seg) { int n = seg.Length; if (n < 2) return seg; int mn = seg[0], mx = seg[0]; long sum = seg[0]; for (int i = 1; i < n; i++) { int v = seg[i]; if (v < mn) mn = v; if (v > mx) mx = v; sum += v; } if (mn == mx) return seg; double c = sum / (double)n; int cntL = 0; foreach (var v in seg) if (v <= c) cntL++; int cntR = n - cntL; var left = new int[cntL]; var right = new int[cntR]; int iL = 0, iR = 0; foreach (var v in seg) if (v <= c) left[iL++] = v; else right[iR++] = v; left = SortNoExtraCopy(left); right = SortNoExtraCopy(right); var outArr = new int[n]; Array.Copy(left, 0, outArr, 0, left.Length); Array.Copy(right, 0, outArr, left.Length, right.Length); return outArr; } // --- генераторы --- public static int[] GenerateRandomArray(int n, int min, int max) { var rnd = new Random(); var arr = new int[n]; for (int i = 0; i < n; i++) arr[i] = rnd.Next(min, max + 1); return arr; } } public class Program { static string Arr<T>(T[] a) => "[" + string.Join(", ", a) + "]"; public static void Main() { // Консоль в UTF-8 Console.OutputEncoding = Encoding.UTF8; Console.InputEncoding = Encoding.UTF8; // int var x = new[] { 5, 1, 9, 3, 7, 2, 2, 8, 4, 6 }; ThanosMeanLessMemory.ThanosIntSortInPlace(x); Console.WriteLine(Arr(x)); var arr = ThanosMeanLessMemory.GenerateRandomArray(25, -1000, 1000); Console.WriteLine("arr before : " + Arr(arr)); ThanosMeanLessMemory.ThanosIntSortInPlace(arr); Console.WriteLine("arr sorted : " + Arr(arr)); } }
Standard input is empty
[1, 2, 2, 3, 4, 5, 6, 7, 8, 9] arr before : [378, 547, 785, -288, -594, -418, 804, -132, 174, 230, 29, 680, 569, -687, -649, 33, 656, -380, -950, 646, 877, 224, -835, 602, -656] arr sorted : [-950, -835, -687, -656, -649, -594, -418, -380, -288, -132, 29, 33, 174, 224, 230, 378, 547, 569, 602, 646, 656, 680, 785, 804, 877]