Как я могу отсортировать регион в массиве в Scala?

У меня есть массив, скажем var DivA = new Array[Int](100005).

Я заполнил элементы в DivA до некоторой позиции, которая меньше 100005. Например, мой массив выглядит как Diva = {1,2,10,5,15,20}.

В C ++ у нас есть sort(DivA, DivA + N), но как мы можем отсортировать массивы в Scala до определенного индекса?

Я пробовал Sorting.quickSort(DivA), но не знаю, как определить индекс, до которого я хочу отсортировать массив, чтобы приведенная выше инструкция сортирует массив, а массив выглядит как DivA={0,0,0,0,0}?

      var Diva=new Array[Int](10000);
      for(j<-15 to 0 by -1){
           DivA(posA)=j;
           posA=posA+1;
      }
      Sorting.quickSort(DivA);

      for(j<-0 to posA-1)
        {
          print(DivA(j));
          print(" ");
        }
1
chandan111 23 Мар 2014 в 16:41

4 ответа

Лучший ответ

Если вы хотите отсортировать регион в массиве, вы можете использовать метод sort в java.util.Arrays:

java.util.Arrays.sort(DivA, 0, 15)

Этот метод предлагает fromIndex и toIndex. Обратите внимание, что этот метод выполняет сортировку на месте . Вероятно, в вашем случае это нормально, поскольку стиль, который вы применяете, кажется «императивным».

Если производительность имеет значение, массивы, вероятно, будут быстрее, чем другие коллекции. Другими причинами использования массивов могут быть потребление памяти или совместимость.

В противном случае вы, вероятно, сможете разработать свои структуры данных / алгоритм другим (более «функциональным») способом, используя идиоматические коллекции Scala.

2
Beryllium 23 Мар 2014 в 18:31

Вы можете использовать sorted или sortBy, в зависимости от ваших потребностей. В случае простого Array[Int], sorted должно быть достаточно:

val arr = Array.iterate(15, 15)(_ - 1)
arr: Array[Int] = Array(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

val sortedArray = arr.sorted
sortedArray: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)

Вы можете предоставить свой собственный класс типов Ordering, если хотите какой-то другой порядок.

Вы можете найти его в документации.

Хотя, как было отмечено в другом ответе, вам следует предпочесть неизменный Vector, если у вас нет веской причины переключиться на Array.

1
Patryk Ćwiek 23 Мар 2014 в 17:24

Метод sorted() является общим для всех коллекций, а массивы в Scala неявно преобразуются в коллекцию. Таким образом, вы можете отсортировать вызовы по Array[Int], например:

scala> val p = (10 to 1 by -1).toArray
p: Array[Int] = Array(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

scala> p.sorted
res5: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
1
user537862 23 Мар 2014 в 17:24

Во-первых, если вы программируете на Scala, вам следует подумать о Vector или List, потому что они неизменяемы, что является предпочтительным способом программирования на Scala ...

А для Vector и List есть функция sorted (), которая сортирует массив

0
mister11 23 Мар 2014 в 16:47
Я читал о списке и векторе, но нет ли способа отсортировать массив целых чисел?
 – 
chandan111
23 Мар 2014 в 16:51