2014-12-10 2 views
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'변수를 도입 한 방식에 어떤 문제가 있습니까?

답변

3

timesLopped++for 루프 외부한다 :

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++;    
     } 
    } 
+0

바보 나 .. 감사합니다! – Dziugas

관련 문제