1
정렬 마라톤에서 공통 정렬 알고리즘에 대한 의사 코드를 찾아 Java로 구현하려고합니다.(java) bubblesort가 정렬되지 않는 이유는 무엇입니까?
내가 처음 시도하는 것은 bubblesort입니다. 내가 잘 작동하는 표시되는 간단한 형태 썼다 : 가장 높은 값이 마지막 요소에 대한 루프가 실행됩니다 때마다 가져되기 때문에,
package bubblesort;
public class Sort {
private static void swapElements(int[] array, int index1, int index2) {
int holder = array[index1];
array[index1] = array[index2];
array[index2] = holder;
}
public static void ascending(int[] array) {
boolean sorted = false;
while(!sorted) {
sorted = true; //if no elements are swapped, 'sorted' remains equal to true and the while-loop ends.
for(int i = 0; i < array.length - 1; i++) {
if(array[i] > array[i + 1]) {
swapElements(array, i, i + 1);
sorted = false;
}
}
}
}
}
그러나을, 나는에 요소를 두어이를 개선하기 위해 노력 마지막으로 배열 전체를 확인하는 횟수를 계산하는 새로운 변수를 추가합니다.
package bubblesort;
public class Sort {
private static void swapElements(int[] array, int index1, int index2) {
int holder = array[index1];
array[index1] = array[index2];
array[index2] = holder;
}
public static void ascending(int[] array) {
int timesLooped = 0;
boolean sorted = false;
while(!sorted) {
sorted = true;
for(int i = 0; i < array.length - timesLooped - 1; i++) {
if(array[i] > array[i + 1]) {
swapElements(array, i, i + 1);
sorted = false;
}
timesLooped++;
}
}
}
}
이번에는 정렬에 실패합니다. 배열의 일부 요소 만 정렬되고 다른 요소는 정렬되지 않습니다.
내 질문은 : 불필요한 비교를 피하려고 시도하는 'timesLooped'변수를 도입 한 방식에 어떤 문제가 있습니까?
바보 나 .. 감사합니다! – Dziugas