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를