Среди прочего, похоже, что основная проблема заключается в том, что вы пытаетесь распечатать элементы массива , а вы его сортируете. Давайте посмотрит на пару итераций вашего цикла, чтобы увидеть, что происходит:
j = 2; data = { 5, 2, 6, 1, 3 }
key = data[2] = 6
i = j - 1 ==> i = 2 - 1 = 1
data[i] = 2 < key = 6 <-- while loop does nothing
data[i+1] = data[2] = key = 6
data[j] = 6
j = 3; data = { 5, 2, 6, 1, 3 }
key = data[2] = 1
i = j - 1 ==> i = 3 - 1 = 2
data[i] = 6 > key = 1
data[3] = data[2] ==> data[3] = 6
i = i - 1 ==> i = 1
data[i] = 2 > key = 1
data[2] = data[1] ==> data[2] = 2
i = i - 1 ==> i = 0
i <= 0 <-- while loop stops
data[i+1] = data[0] = key = 1
data[j] = 6
data = { 5, 1, 2, 6, 3 }
В английском языке, что происходит это сортировка вставки держит максимальный элемент (6) в указательном цикле у, потому что это как сортировка вставки работает. Таким образом, каждая итерация цикла вы просто распечатываете текущий максимальный элемент списка, который в этом случае всегда 6. Вы также начинаете свой внешний цикл с неправильного индекса (вы должны начинать с 1, а не 2, почему вы начали с 2 ?). Вы также не позволяете вашему внутреннему циклу смотреть на первый элемент массива.
Так что ваш код должен выглядеть следующим образом:
public class insertionSort
{
public static void main(String[] args)
{
int data[] = { 5, 2, 6, 1, 3 };
for(int j = 1; j < data.length; ++j)
{
int key = data[j];
int i = j - 1;
while(i >= 0 && data[i] > key)
{
data[i + 1] = data[i];
--i;
}
data[i + 1] = key;
}
for(int k = 0; k < data.length; ++k)
{
System.out.print(data[k] + " ");
}
}
}
что ваш результат? – Metalhead1247
Мой результат: 6 6 6 – user2779836
Это отличная возможность использовать отладчик IDE и входить в код, чтобы понять, почему он не делает то, что вы ожидаете. Это необходимый навык. – Kon