데이터 구조 정렬: 8 대 정렬 의 거품 정렬 (거품 정렬 은 교환 정렬 에 속 함)

알고리즘 사상: 뒤에서 앞으로, 두 가지 비교 (a [i - 1] 와 a [i] 비교), 역순 으로 두 가지 요 소 를 교환 하고 순서 가 움 직 이지 않 습 니 다.첫 번 째 정렬 후 최소 요 소 는 정렬 할 요소 의 맨 앞으로 이동 합 니 다. 그러면 매번 정렬 한 후에 남 은 정렬 요소 의 최소 값 은 항상 남 은 정렬 요소 의 맨 앞으로 이동 합 니 다. 그러면 n 개의 요 소 는 n - 1 번 을 최대 로 진행 하면 질서 가 있 습 니 다.주의해 야 할 것 은 그 중 한 번 에 요 소 를 교환 하 는 상황 이 발생 하지 않 았 다 면 이 정렬 요 소 는 이미 질서 가 있 고 그 다음 에 계속 비교 교환 하지 않 아 도 된다 는 것 이다.따라서 알고리즘 에서 하나의 표지 위 치 를 설정 하여 모든 순환 에 교환 이 발생 했 는 지 판단 해 야 한다. 만약 에 교환 이 발생 하지 않 았 다 면 이때 이 서열 은 질서 가 있 고 이때 순환 에서 벗 어 나 야 한 다 는 것 을 의미한다.
알고리즘 절차: 최대 n - 1 번 정렬 을 하고 비교 교환 이 필요 하기 때문에 2 층 순환 이 있어 야 합 니 다. 외층 순환 은 0 - (n - 1) 에서 n - 1 번 정렬 을 나타 내 고 내층 순환 은 (n - 1) - (1) 에서 두 번 비교 하고 상황 에 따라 교환 여 부 를 판단 해 야 합 니 다. 만약 에 교환 이 발생 하면 표지 위 치 를 '교환' 으로 설정 합 니 다.종합 적 으로 (1) 외층 순환 0 - (n - 1) (2) 링 은 (n - 1) - (1) 에서 두 가 지 를 비교 하고 상황 에 따라 교환 여 부 를 판단 한다. 만약 에 교환 이 발생 하면 표지 위 치 를 '교환' (3) 으로 설정 하고 매번 순환 한 후에 표지 위치 가 true 인지, false 라면 break, 순환 에서 벗 어 나 면 이 서열 은 질서 가 있 고 그렇지 않 으 면 계속 정렬 을 한다.
 구현 코드:
public class BubbleSort {

    public static int[] bubbleSort(int[] array){
        int n=array.length;//       
        boolean isSwap;//   ,          
        for(int i=0;i1;i++){
            isSwap=false;//           false
            for(int j=n-1;j>0;j--){
                if(array[j-1]>array[j]){
                  int temp=array[j-1];
                  array[j-1]=array[j];
                  array[j]=temp;
                  isSwap=true;
                }
            }
            if(isSwap==false)
                break;
        }
        return array;
    }
   public static void main(String[] args){
       int[] array={6,4,8,3,7,1,9,2,10,5,0};
       System.out.println(BubbleSort.bubbleSort(array).toString());
   }
}
운행 결과:

좋은 웹페이지 즐겨찾기