Сортировать массив и затем выбрать 10 просто, но это будет O (n log n), и если вы не хотите переупорядочивать исходный массив, вам также нужно будет сделать копию.
Лучшей идеей является использование max-heap (или очереди приоритетов), которая автоматически сортирует элементы по мере их вставки, так что самый большой элемент - это корневой узел. Идите вдоль массива, продолжайте вставлять элементы, пока не достигнете 10; затем для каждого последующего элемента просто проверьте, меньше ли он самого большого элемента в куче (проверка с постоянным временем), и, если это так, вытащите этот элемент и вставьте новый элемент. Когда вы прошли весь массив, 10 вещей, оставшихся внутри, являются вашими минимальными элементами. Это даст вам ваш результат в O (n log 10) == O (n), поскольку каждая вставка в кучу будет стоить только O (log 10).
Реализация Java Priority Queue по умолчанию является минимальной очередью, поэтому вам нужно будет передать Comparator, который меняет порядок. См. этот вопрос для примеров того, как это сделать. Вам нужно создать пользовательский объект, который также содержит пары (значение, индекс), если вы хотите получить индексы в конце.