using System.Collections.Generic;
public static void Main()
foreach (var i in sortKoffArrayWithHeap(new int[] { 1, 4, 5, 2, 3, 7, 8, 6, 10, 9 }, 2))
public static int[] sortKOffArray(int[] data, int k)
for (var i = 0; i < data.Length; i++)
var start = Math.Max(0, i - k);
var end = Math.Min(data.Length, i + k);
for (var j = i - 1; j >= start; j--)
public static int[] sortKoffArrayWithHeap(int[] data, int k)
var heap = new SortedList<int, int> {};
var result = new List<int> {};
var maxHeapSize = 2 * k + 1;
for (var i = 0; i < data.Length; i++)
heap.Add(data[i], data[i]);
if (heap.Count > maxHeapSize)
var en = heap.GetEnumerator();
result.Add(en.Current.Value);