2012-12-06 5 views
1

나는 10000 개의 고유 값을 순서대로 정렬하는 버블 정렬 프로그램을 작성했습니다.Java 버블 정렬 문제

나는 프로그램을 실행했고 프로그램을 완료하는 데 걸리는 시간 (nanoTime 사용)을 알려주지 만 프로그램의 코드에 다른 출력을 추가하려고합니다. 프로그램이 처음부터 끝까지 정렬하는 데 걸리는 이동 횟수. 나는 그것을 할 방법

public class BubbleSort { 
public static void main(String[] args) { 
    int BubArray[] = new int[]{#here are 10000 integers#}; 
    System.out.println("Array Before Bubble Sort"); 
     for(int a = 0; a < BubArray.length; a++){ 
      System.out.print(BubArray[a] + " "); 
     } 

     double timeTaken = bubbleSortTimeTaken(BubArray); 
      bubbleSort(BubArray); 
      System.out.println("");    
      System.out.println("Array After Bubble Sort"); 
    System.out.println(" Time taken for Sort : " + timeTaken + " milliseconds.");     
      for(int a = 0; a < BubArray.length; a++){ 
        System.out.print(BubArray[a] + " "); 
     } 
} 

private static void bubbleSort(int[] BubArray) { 

     int z = BubArray.length; 
     int temp = 0; 

     for(int a = 0; a < z; a++){ 
       for(int x=1; x < (z-a); x++){ 

         if(BubArray[x-1] > BubArray[x]){ 

           temp = BubArray[x-1]; 
           BubArray[x-1] = BubArray[x]; 
           BubArray[x] = temp; 

         }  
       } 
     } 
} 
public static double bubbleSortTimeTaken(int[] BubArray) { 
long startTime = System.nanoTime(); 
    bubbleSort(BubArray); 
long timeTaken = System.nanoTime() - startTime; 
return timeTaken; 
} 
} 

코드 실행 및 출력 : 여기에

코드입니다

Array Before Bubble Sort 
13981 6793 2662 10986 733 10107 2850 ... 
Array After Bubble Sort 
10 11 17 24 35 53 57 60 61 78 83 89 128 131 138 141 .... 
Time taken for Sort : 1.6788472E7 milliseconds. 

그러나 나는 그것이 어떻게 저를 알려주는 코드에 다른 출력을 추가 할 많은 이동 (기본적으로 이동 카운터) : 예 :

Time taken for Sort : 1.6788472E7 milliseconds. 
Total number of moves: 3000 

의미가 있습니까? 도움을 주시면 감사하겠습니다.

+0

은 무엇을 의미하게 만들까요? 왜 그런 가치에 관심이 있습니까? – SJuan76

+0

움직임의 수를 추적하기 위해 변수를 선언하고 알고리즘이 값을 이동할 때마다 변수를 추가해야하는 것처럼 들립니다. 그런 다음 그 변수를 끝까지 출력하면됩니다. – jball

+0

그건 그렇고, 우리는'bubbleSort (BubArray);를 두 번 호출합니까? 한 번'bubbleSortTimeTaken'에서와'main'에서 한 번? 실행 시간을 얻으려면'main'에서 하나의 호출 만 제거하십시오. – bhuang3

답변

1

내가 int를 반환하고 time complexity 그것에 할당 bubbleSort을 변경합니다. main에서

그런

private static int bubbleSort(int[] BubArray) { 

     int z = BubArray.length; 
     int temp = 0; 

     int itrs = 0; 

     for(int a = 0; a < z; a++){ 
       for(int x=1; x < (z-a); x++){ 

         if(BubArray[x-1] > BubArray[x]){ 

           temp = BubArray[x-1]; 
           BubArray[x-1] = BubArray[x]; 
           BubArray[x] = temp; 


         }  

         itrs++; 
       } 
     } 

     return itrs; 

은} :

int itrs = bubbleSort(BubArray); 
      System.out.println("");    
      System.out.println("Array After Bubble Sort"); 
    System.out.println(" Time taken for Sort : " + timeTaken + " milliseconds."); 
    System.out.println("Time complexity: " + itrs); 
+0

"itrs"내가 Integers에 사용하고있는 이름을 추측하고 있습니까? –

+0

그냥 분명 해요, "시간 복잡성"은 완료 당 이동 수입니까? 같이 : 정렬 시간 : 3.8208782E7 밀리 초. 시간 복잡도 : 1447551 –

+0

예, 실제로 @ JohnSmith – amphibient

1

이 시도 :

// returns the number of switches 
private int bubbleSort(int[] BubArray) { 

     int z = BubArray.length; 
     int temp = 0; 
     int timesSwitched = 0; 
     for(int a = 0; a < z; a++){ 
       for(int x=1; x < (z-a); x++){ 

         if(BubArray[x-1] > BubArray[x]){ 

           temp = BubArray[x-1]; 
           BubArray[x-1] = BubArray[x]; 
           BubArray[x] = temp; 
           timesSwitched++ 
         }  
       } 
     } 
    return timesSwitched; 
} 
+0

감사합니다. 귀하의 도움에 감사 드리며 신속한 답변을드립니다. foampile의 대답이 실제로 내 문제를 해결했지만. –