В подобных случаях я бы использовал:
Dictionary<string, List<int>> dict;
Ключами являются имена клиентов (если они уникальны, в противном случае присваивают уникальный идентификатор какого-либо рода?) Значения представляют собой списки продаж для каждогопокупатель.После заполнения этого массива вы можете продолжить либо сортировку и получение среднего элемента (как упомянуто выше) , либо суммирование и деление на количество элементов для получения медианы. (это неправильно)
Сортировка (с использованием метода, который сравнивает) занимает время O (nlog n), где n - длина списка, который нужно отсортировать.
Существуют алгоритмы выбора, которые могут вернуть k-е наименьшее значение в O (n), проверьте ссылку в Википедии ниже