>  기사  >  Java  >  Java 클래식 알고리즘 버블 정렬 코드 공유

Java 클래식 알고리즘 버블 정렬 코드 공유

PHPz
PHPz원래의
2017-03-05 12:10:381618검색

원제: Java의 클래식 알고리즘: Bubble Sort(Bubble Sort)

버블 정렬이란?

버블 정렬은 순서에 따라 요소를 서로 쌍으로 비교하는 간단한 정렬 알고리즘입니다. 순서가 큰 것에서 작은 것 순이면 두 요소를 서로 비교할 때 더 큰 요소가 먼저 순위가 지정되고, 그렇지 않으면 더 큰 요소가 나중에 순위가 지정됩니다. 버블 정렬은 큰 것부터 작은 것까지의 정렬과 작은 것부터 큰 것의 정렬로 나누어진다.

원리: 인접한 두 요소를 비교하고 값이 더 큰 요소를 오른쪽 끝으로 바꿉니다.

아이디어: 인접한 두 숫자를 차례로 비교하여 앞에 소수점을 넣고 뒤에 큰 숫자를 넣습니다. 즉, 첫 번째 단계에서는 먼저 첫 번째 숫자와 두 번째 숫자를 비교하고 소수를 먼저 배치하고 큰 숫자를 마지막에 배치합니다. 그런 다음 두 번째 숫자와 세 번째 숫자를 비교하고 소수를 앞에 놓고 큰 숫자를 뒤에 놓고 마지막 두 숫자를 비교할 때까지 이렇게 계속하여 소수를 앞에 놓고 큰 숫자를 뒤에 넣습니다. 모든 정렬이 완료될 때까지 첫 번째 단계를 반복합니다.

예: 배열을 정렬하려면: int[] arr={6,3,8,2,9,1};

1차 정렬:

1차 정렬: 63 비교, 63보다 큼, 위치 바꾸기: 3 6 8 2 9 1

두 번째 정렬 : 68을 비교하면 6보다 작습니다. 8, 위치 교환 없음: 3 6 8 2 9 1

세 번째 정렬: 82을 비교하면 82보다 큽니다. , 교환 위치: 3 6 2 8 9 1

네 번째 순서: 89 비교, 89보다 작음, 위치 교환 없음: 3 6 2 8 9 1

다섯 번째 정렬: 91 비교: 91보다 큼, 위치 바꾸기: 3 6 2 8 1 9

첫 번째 여행에서 총 5 비교를 했고, 정렬 결과는 3 6 2 8 이었습니다. 1 9

---------------------------------- --- ----------

2차 정렬:

첫 번째 정렬: 36을 비교하면 36 , 위치 교환하지 않음: 3 6 2 8 1 9

두 번째 정렬: 62 비교, 62보다 큼, 위치 바꾸기: 3 2 6 8 1 9

3위: 68 비교, 68보다 큼, 위치 교환 없음: 3 2 6 8 1 9

네 번째 정렬: 81 비교, 81보다 큽니다. 위치 바꾸기: 3 2 6 1 8 9

두 번째 패스에서 총 4개의 비교가 이루어졌으며 정렬 결과는 다음과 같습니다. 3 2 6 1 8 9

---- -------------------------- ----------- ---------------

세 번째 정렬:

첫 번째 정렬: 3 2과 비교하면 32, 위치 교환: 2 3 6 1 8 9

두 번째 정렬:

36 비교, 36보다 작습니다. 위치를 교환하지 마세요. 2 3 6 1 8 9

세 번째 정렬: 61 비교, 6 더 큼 1보다 위치 교환: 2 3 1 6 8 9

두 번째 여행이 진행됩니다. 총 3 비교, 정렬 결과: 2 3 1 6 8 9

------------ - ------------------------------------------------- - -------

네 번째 정렬:

첫 번째 정렬: 23 비교, 23보다 작음, 위치 교환 없음: 2 3 1 6 8 9

두 번째 정렬: 31 비교 , 31보다 큽니다. 위치 바꾸기: 2 1 3 6 8 9

두 번째 여행은 총 2 비교를 진행했고, 정렬 결과: 2 1 3 6 8 9

----------------------------------------------- --- --------

다섯 번째 정렬:

첫 번째 정렬: 21을 비교하면 21, 포지션 교환: 1 2 3 6 8 9

두 번째 여행은 총 1회 비교, 정렬 결과: 1 2 3 6 8 9

------------------- ---------- -------------- -----

최종 결과:

1 2 3 6 8 9--------- -------- ---------------- --------

N개 숫자를 정렬해야 하며 총 N개임을 알 수 있습니다. -1 정렬이 수행될 때마다 i에 대한 정렬 횟수는 (N-i)회입니다. , 즉 이중 루프 문을 사용할 수 있습니다. 외부 레이어는 루프의 횟수를 제어하고, 내부 레이어는 루프의 횟수를 제어합니다. 레이어는 각 패스의 사이클 수, 즉


for(int i=1;i<arr.length;i++){

    for(int j=1;j<arr.length-i;j++){

    //交换位置

}


버블 정렬의 장점: 정렬이 수행될 때마다 비교 횟수가 한 번 줄어듭니다. 수행하면 더 큰 값을 찾습니다. 위의 예와 같이 첫 번째 비교 후에는 마지막 숫자가 가장 큰 숫자여야 합니다. 두 번째 정렬에서는 마지막 숫자를 제외한 다른 숫자만 비교하면 되며 가장 큰 숫자도 찾을 수 있습니다. 두 번째 비교에 참여한 숫자 뒤에는 세 번째 비교에서는 마지막 두 숫자를 제외한 나머지 숫자만 비교하면 되는 식이다... 즉, 비교를 하지 않을 때마다 여행 당 한 번의 비교가 줄어든다. 어느 정도 알고리즘의 양.

시간 복잡도 측면에서:

 1. 데이터가 올바른 경우 정렬을 완료하는 데 한 번의 이동만 필요합니다. 필요한 비교 횟수와 레코드 이동 횟수가 모두 최소값에 도달합니다. 즉, Cmin=n-1; Mmin=0; 따라서 버블링 정렬의 가장 좋은 시간 복잡도는 O(n)입니다.

 2. 아쉽게도 데이터가 역순인 경우 n-1 패스가 필요합니다. 각 정렬 작업에는 n-i 비교(1≤i≤n-1)가 필요하며, 각 비교에서는 교환 레코드 위치에 도달하기 위해 레코드를 3번 이동해야 합니다. 이 경우 비교 및 ​​이동 횟수가 최대에 도달합니다. 버블 정렬의 최악의 시간 복잡도는 O(n2)입니다.

요약하면 버블 정렬의 전체 평균 시간 복잡도는 O(n2 ).

Java 클래식 알고리즘 버블 정렬 코드:

/*
 * 冒泡排序 */public class BubbleSort {
  public static void main(String[] args) {
    int[] arr={6,3,8,2,9,1};
    System.out.println("排序前数组为:");
    for(int num:arr){
      System.out.print(num+" ");
    }
    for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数      for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次        if(arr[j]>arr[j+1]){
          int temp=arr[j];
          arr[j]=arr[j+1];
          arr[j+1]=temp;
        }
      }
    } 
    System.out.println();
    System.out.println("排序后的数组为:");
     for(int num:arr){
       System.out.print(num+" ");
     } 
  }
 }

자세히 알아보기 고전적인 Java 알고리즘 버블 정렬에 대해 공유합니다. PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.