Проблема присваивания переменной при сортировке вставкой - PullRequest
0 голосов
/ 19 июня 2020

В следующем коде, реализующем сортировку вставкой, он полностью прерывается при замене currentElement на nums[i] (во втором для l oop). Насколько я могу судить, i не меняется до следующей итерации. Даже печать i и currentElement в пределах секунды для l oop показывает, что они все время одинаковы.

Что происходит не так при использовании nums[i]?

public class InsertionSort {
  4         public static void main(String[] args){
  5                 int[] nums = {23,4,5234,1234,3,2,0,-44, -1239};
  6                 sort(nums);
  7                 
  8                 for (int i : nums) {
  9                         System.out.println(i);
 10                 }
 11                 
 12         }
 13
 14
 15         public static void sort(int[] nums) {
 16                 for (int i = 1; i < nums.length; i++) {
 17                         int currentElement = nums[i];
 18                         int j;
 19                         for (j = i - 1; j >= 0 && nums[j] > currentElement; j--) {
 20                                 nums[j + 1] = nums[j];
 21                         }
 22                         nums[j + 1] = currentElement;
 23                 }
 24         }
 25 }

Если это имеет значение, результаты сортируются естественным образом для currentElement, а при использовании nums[i] он был отсортирован следующим образом: 4, 23, 1234, 3, 2, 0, -44, -1239, 5234.

1 Ответ

1 голос
/ 20 июня 2020

Самое первое, что делает ваш самый сокровенный l oop, это изменяет nums[j+1]; поскольку j=i-1, это означает, что он меняется на nums[i].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...