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 : [279, -834, 473, 451, 15, 943, -335, 326, -943, -956, 953, 8, -371, 933, 893, 187, -985, 159, 911, 593, -599, 60, 130, 633, 753] arr sorted : [-985, -956, -943, -834, -599, -371, -335, 8, 15, 60, 130, 159, 187, 279, 326, 451, 473, 593, 633, 753, 893, 911, 933, 943, 953]