버블 알고리즘과 최적화

I, 0부터 어레이 [i]는 어레이 [I + 1] 배열 [I] "어레이 [내가 + 1] 다음의 과거 위치하다면

마지막까지 최대 값의 뜻 거품을 통해 정렬 후 

  공개  공극 거품 정렬 ( INT의 배열 []) {
      ( INT I = 0; I는 <사항 Array.length 일; I ++ ) {
       // 이후 어레이 [J] 배열 [J + 1] 마지막으로 비교 이송 될 비트 J + 1 = J 그래서 <-bE 사항 Array.length, 사항 Array.length 1. 
       ( INT J = 0; J는 <사항 Array.length 수 - 1]. J ++ ) {
         IF (배열 [J] "어레이 [. J + 1 ]) {
           INT의 TEMP = 배열 [J]
          어레이 [J] = 배열 [J + 1 ];
          어레이 [J + 1] = 온도;
        }
      }
    }
  }

최적화 1

마지막으로 각각의 이송 봐

첫 번째 패스, 비트의 최대 값 난에 버블

두 번째 패스, 두 번째로 큰 값은 첫 번째 비트에 버블 I-1

세 번째 패스, 세 번째로 큰 값은 두번째로 버블 링된다 I-2 비트

...

다시 비교하지 않고 마지막 트래버스의 각 후 그래서

  공개  공극 거품 정렬 ( INT의 배열 []) {
      ( INT I = 0; I <사항 Array.length; I ++ ) {
       // 마지막 최대 횡단 너무 이송 사항 Array.length로 다시 비교없이 후마다 -1 위치를 
      위한 ( INT J = 0; J <BE 사항 Array.length - I - 1]. J ++ ) {
         IF (배열 [J] "어레이 [. J + 1 ]) {
           INT의 TEMP = 배열 [J]
          어레이 [J] = 배열 [J + 1 ];
          어레이 [J + 1] = 온도;
        }
      }
    }
  }

최적화 2

전체를 통해 일정 시간 후, 배열이 순서를 완료 한 경우, 탐색을 계속하지 않습니다

공개  공극 거품 정렬 ( INT의 배열 []) {
     위해 ( INT ; I <사항 Array.length; 나는 0 = I ++ ) {
       부울 isSorted = ; //标志是否已排序
        ( INT J = 0; J <사항 Array.length - I - 1; J ++ ) {
         경우 (배열 [J] "어레이 [J + 1 ]) {
           INT의 온도 = 배열 [J]
          어레이 [J] = 배열 [J + 1 ];
          어레이 [J + 1] = 온도;
          isSorted는 = 거짓 ;
        }
      }
      흐름 (isSorted) {
         휴식 ;
      }
    }
  }

최적화 3

마지막 관통 한 통과 이미 많은 부분을 지시하면,이 부분은 이제 [3, 2, 1, 6, 7, 8, 9, 10, 배열 [3과 같이 분류 할 수없는 그 질서이다]의 요소 교환의 최종 위치가 드디어 경계 위치가 배열의 흐트러짐하는 종류의 각 라운드에 기록 할

공개  공극 거품 정렬 ( INT의 배열 []) {
     INT sortBorder BE 사항 Array.length = - 1;. // 경계 배열없이 
    INT lastExchageIndex = 0; // 교환 최종 위치 기록 
    에 대한이 ( INT I = 0; I는 <사항 Array.length 일; ++ I ) {
       부울 IsSorted = true로 ,
        ( INT J = 0; J <sortBorder, J ++ ) {
         IF (배열 [J] "어레이 [J + 1이다. ]) {
           INT의 TEMP = 배열 [J]
          어레이 [J] = 배열 [J + 1 ];
          어레이 [J + 1] = 온도;
          isSorted는 = 거짓 ;
          lastExchageIndex = J;
        }
      }
      sortBorder = lastExchageIndex;
      경우 (isSorted) {
         휴식 ;
      }
    }
  }

참조 https://blog.csdn.net/wubingju93123/article/details/81215984를

추천

출처www.cnblogs.com/lz-0011/p/12078528.html