Вы не можете поменять местами значения в другом методе таким образом, поскольку параметры передают значения, а не ссылки на значения.
Вам, вероятно, лучше просто не использовать отдельный метод для обмена, например этот (также пришлось увеличивать вместо уменьшения значения i
и j
):
public int[] insertionSort(int[] a) {
int temp;
for(int i=0; i<a.length;i++) {
int j=i;
while(j > 0 && a[j-1] > a[j]) {
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
j--;
}
}
return a;
}
Редактировать: пришлось обновить снова - условия в цикле while были в неправильном порядке, поэтому он искал следующий индекс массива, прежде чем проверять, достиг ли он конца массива.
Редактировать 2. Как упоминалось в комментариях, я покажу, как написать метод swap
, который действительно работает — вместо передачи значений вам придется передавать весь массив и возвращать его после. Я бы по-прежнему, вероятно, рекомендовал сделать это вышеописанным способом, но только в образовательных целях:
public int[] insertionSort(int[] a) {
for(int i=0; i<a.length;i++) {
int j=i;
while(j > 0 && a[j-1] > a[j]) {
a = swap(a, j-1, j);
j--;
}
}
return a;
}
public int[] swap(int[] a, int index1, int index2) {
int temp = a[index1];
a[index1] = a[index2];
a[index2] = temp;
return a;
}
Редактировать 3: делал что-то глупое и не совсем дал сортировку вставками. Теперь все в порядке (извините за каламбур).
person
SharkofMirkwood
schedule
06.07.2014