버블 정렬 (버블 정렬)

그것의 기본 시간 복잡도 설명 O를 (N ^ 2)

기본적인 아이디어 거품 정렬 (버블 정렬) 인 연속하여 인접하는 요소의 값을 비교 (요소의 작은 인덱스부터) 다시 앞에서 조합 순서를 처리 한 후 상기 스위치 역방향 발견 된 경우 그 요소의 값이 클수록 서서히 물에서 공기 방울로 후방을 향하여 전방으로부터 서서히 동일한 차지. 정렬 과정 때문에, 요소는 더 거기 여행이 더 교환 없었다 경우, 그렇게 요소가 교환했는지 확인하기 위해 정렬 프로세스 플래그 플래그를 설정하여 순서대로 순서를 보여줍니다, 자신의 위치에 가깝게 유지한다. 따라서, 상대적으로 불필요한 감소된다.

패키지 com.diyo.sort; 

오기 java.text.SimpleDateFormat에,
 수입 java.util.Arrays;
 오기 java.util.Date; 

/ ** 
 * O (N- ^ 2)의 거품 정렬 거품 정렬 시간 복잡도 
 * 
 * @author DengZY 
 * 
 * / 
공용  클래스 거품 정렬 { 

    공공  정적  무효 메인 (문자열 []에 args) { 

        INT ARR [] = {1 ,. (9) -1, (10) -2. } 

        // O 속도 정렬 테스트 위조 (N ^ 2) , 80,000에 테스트 데이터
 //         ; INT [] = arr2 새로운 새 INT [80000]이다
 //         용 INT (I = 0; I <80000은, I는 ++) {
 //            arr2은 [I] = (INT) (인 Math.random () * 999,999); //는 A가 [0,999999)의 수가 생성
 //이         } 

//         날짜 = 새로운 새 날짜 1 날짜 ();
 //         SimpleDateFormat의 SimpleDateFormat의 SimpleDateFormat의 새로운 새 = ( 의 "MM-DD-YYYY의 HH : MM : SS");
 //         문자열 date1Str = simpleDateFormat.format (DATE1)
 //         에서 System.out.println는 () + date1Str을 "시간 = 정렬 앞에있는"; 
        
        System.out에. 에 println ( "주문 전에 ----- -----" ); 
        에서 System.out.println (Arrays.toString (편곡)); 

        에서 System.out.println이 ( "정렬을 시작 ---- ----- - " )
         거품 정렬 (도착) 
        에서 System.out.println ( "정렬 ----- ----- END ");

        에서 System.out.println ( "정렬 후 ----- -----" ); 
        에서 System.out.println (의 Arrays.toString (ARR)); 

//         날짜 = 새로운 새로운 DATE2 날짜 ();
 //         문자열 date2Str simpleDateFormat.format = (DATE2)
 //         에서 System.out.println ( "시간 정렬 ="+ date2Str); 
        
        / * 
         * // 끝에서 두 번째의 첫 번째 패스, 행의 최대 수를 정렬 
      대 (INT의 J = 0; J <arr.length - 1 - 0; J ++) {// 숫자 번호 앞에 후자보다 크면 교환
        IF (ARR [J]> ARR [. J + 1]) {
          TEMP ARR = [J]
          ARR [J] = ARR [J + +1]
           ARR [J + 1이다.] = TEMP;
        }
      }
      에서 System.out.println ( "첫번째 통과 배열을 정렬 한 후") System.out에. 에 println (Arrays.toString (도착)); * * // 두 번째 패스를위한 끝에서 두 번째 위치에있는 행의 두 번째로 큰 수를 정렬 (INT J = 0;. J <arr.length 1 - 1 -]. J ++) {// *이 경우, 이전 번호 늦어도 숫자가 큰, 교환 IF (ARR [J]> ARR [J + 1이다.]) {TEMP = ARR [J] ARR [J] = ARR [J + * 1.] ARR [J + 1이다.] = TEMP; }}에서 System.out.println ( "번째 패스 후의 정렬 된 배열") *에서 System.out.println (Arrays.toString의 (ARR)) * * // 정렬 셋째 회 행의 세 번째 숫자 위한 세번째 최하위 (INT J = 0; J <. arr.length 1 - - 2이고; J ++) {// * 숫자 번호 앞에 후자보다 크면, 그 전환하면 (도착 [J]> 도착 [J . + 1]) {ARR TEMP = [J] ARR [J] = ARR [J + * 1]. ARR [J + 1] = TEMP]. 배열 후에}}에서 System.out.println (이하 "제 3 정렬 회 ") *에서 System.out.println (Arrays.toString (도착)) * * // 정렬 제 시간에 대한 카운트 네번째 행의 네 번째로 큰 수 (INT J = 0;. J <arr.length - 1 -]. J ++) {// * 앞의 수는 후자의 수보다 큰 경우, 교환 IF (ARR [J]> ARR [J + 1이다.]) {TEMP = ARR [J] ARR [J] = ARR [J + * 1.] ARR [ J + 1] = 임시} } ( " 번 정렬 후 네번째 어레이")에서 System.out.println; *에서 System.out.println (Arrays.toString의 (ARR));
// 경우의 수의 상기 비율 많은 수의 뒤에, 교환* / } // 버블 정렬 대중에게 보이드 거품 정렬 정적 (INT [] ARR) { INT의 TEMP = 0; 교환 // 임시 변수 부울 플래그 = 거짓을 // 식별 변수 반복 정렬 수가 감소, 상호 교환 여부를 나타내는 를 들어 (INT I = 0; I는 arr.length을 <- 1]. 난 ++) { 의 // 제 (I + 1) 번 정렬, 최종 행의 최대 수 (INT의 J = 0; J <arr.length - 1 - I, J ++) { 사실에 플래그 =; TEMP = ARR [J] (ARR [J]> ARR [. J + 1]) {IF ; ARR [J] = ARR [. J + 1] ; ARR [J + 1이다.] = TEMP } } 에서 System.out.println ( "최초"+ (I + 1) "배 정렬 된 배열"); 에서 System.out.println (Arrays.toString의 (ARR)) ! () 깃발에 {// 정렬 공정 여행, 교환이 일어나지 않을 경우 휴식; 다른 {} = false를 행 플래그 // 리셋 플래그의 다음 판정 } } } }

 (1) 어레이의 전체 크기는 -1 회 사이클

 (2) 각 종류의 수는 점차 감소

 우리가 몇 번 순서에서 교환 한 번 일어나지 않았다 찾을 경우 (3), 당신은 사전에 주문을 끝낼 수 있습니다.

추천

출처www.cnblogs.com/Diyo/p/11415909.html