2012-04-03 5 views
0

문제가 생겨서 지침이 필요합니다. 기본적으로 나는이 버블 정렬 방법을 만들 수 있었다. 이것을 Gap Sort로 수정하면리스트를 통해 매번 인접한 원소를 비교하는 것이 아니라 숫자 (i) 위치만큼 떨어진 원소를 비교합니다. 여기서 i는 n보다 작은 정수입니다. 예를 들어, 첫 번째 요소는 (i + 1) 요소, 두 번째 요소와 (i + 2) 요소, n 번째 요소와 (ni) 요소 등과 비교됩니다. 단일 요소는 모든 요소 비교 될 수있는, 비교되었습니다. 다음 반복에, 나는이 1보다 큰 일부 수 감소와 나는 미만 1버블 정렬 방식으로 갭 정렬

public static void bubbleSort (Comparable[] data, int maxlength){ 
    int position, scan; 
    Comparable temp; 

    for (position = maxlength; position >= 1; position--){ 
     for (scan = 0; scan <= position – 1; scan++){ 
      if (data[scan].compareTo(data[scan+1]) > 0){ 
       // Swap the values 
       temp = data[scan]; 
       data[scan] = data[scan + 1]; 
       data[scan + 1] = temp; 
      } 
     } 
    } 
} 
+0

입니다. GapSort 구현을 찾고 계십니까? 이 링크의 두 번째 게시물을 확인하십시오 : http://www.daniweb.com/software-development/java/threads/238791/gap-sort – Fido

+0

thnx. 하지만 너는 뭔가 설명 할 수 있니? "double SF = 1.3;" 왜 그렇게 유용합니까? – serge

+0

아이디어는 큰 간격으로 시작하여 모든 루프에서 축소하는 것입니다. SF는 "축소 계수 (shrinking coeficent)"와 같습니다. (이 게시물에서 "축소 요인"과 같은 것을 의미합니다.)이 경우 76 %입니다 (즉, 모든 반복에서 간격이 원본의 76 %로 축소됨을 의미합니다 값). – Fido

답변

1

(http://www.daniweb.com/software-development/java/threads/238791/gap-sort에 있음)이 코드가 될 때까지 프로세스가 계속됩니다 당신을 도울 수 있습니다

public static void gapSort (Comparable [] data, int size) { 
    int index; 
    int gap, top; 
    Comparable temp; 
    boolean exchanged; 

    double SF = 1.3; 
    gap = size; 

    do { 
     exchanged = false; 
     gap = (int) (gap/SF); 
     if (gap == 0){ 
      gap = 1; 
     } 
     for (index = 1; index <= size - gap; index++) { 
      if (data [index].compareTo(data [index + gap]) > 0) { 
       temp = data [index]; 
       data [index] = data [index + gap]; 
       data [index + gap] = temp; 
       exchanged = true; 
      } 
     } 
    } while (exchanged || gap > 1); 
} 

기억 Comparable 인터페이스를 구현하는 객체 배열을 정렬하는 가장 쉬운 방법은 일반적으로 Arrays.Sort()