2016-11-30 10 views
0

Я хотел бы знать, если моя следующая реализация SelectionSort является возможной реализацией. Спасибо вам, ребята! :)Является ли это возможной реализацией выбора Сортировка

public static int[] mySelectionSort (int [] array){ 

    int position = 0; 
    int tmp; 

    for (int j = array.length -1; j >= 0; j--){ 

     int max = array[0]; 

     for (int i = 0; i <= j; i++){ 

      if (array[i] >= max){ 

       max = array[i]; 
       position = i; 
      } 
     } 

     tmp = array[j]; 
     array[j] = max; 
     array[position] = tmp; 
    } 
    return array; 
} 

ответ

0

Да, это выбор сортировки.

Вы можете пропустить последний цикл внутреннего цикла, используя for (int i = 0; i < j - нет смысла обменивать последний элемент с собой.

можно рассматривать цикл инварианты:

  • Есть два Подмассивов - начиная часть B и заканчивая часть Х
  • E содержит отсортированную последовательность
  • всех элементов Е не меньше, что товар B
  • самый большой объект из B связан с E
+0

Спасибо за ваш ответ. Я проверил algo с некоторыми примерами, и он работал нормально. Почему позиция должна измениться? По-моему, это правильно, потому что положение сохраняет только положение элемента max, а когда внутренний контур завершен, элемент в позиции j сворачивается с элементом в позиции положения. – KSV97