데이터 구조 (2) 거품 정렬 과 간단 한 선택 정렬

4276 단어
거품 정렬
4. 567917. 메 인 프로그램 을 먼저 던 집 니 다. 4. 567918.
package Sort;

public class BubbleSort {

	public static void main(String[] args) {
		
		int [] a = {2,5,6,7,1,8,9};
		BubbleSort3( a, 6);
		for(int k = 0; k <= 6; k++){
			System.out.println(a[k]);
		}
	}
	
	static void BubbleSort3(int [] a, int n){
		int i = 0;
		int j = 0;
		boolean flag = true;
		for (i=0; i<=n && flag==true; i++){
			flag = false;
			for (j=n; j>=(i+1); j--){
				if (a[j] < a[j-1]){
					swap(a, j, i);
					flag = true;
				}
			}
		}
	}	
	
	static void BubbleSort2(int [] a, int n){
		int i = 0;
		int j = 0;
		for (i=0; i<=n; i++){
			for (j=n; j>=(i+1); j--){
				if (a[j] < a[j-1]){
					swap(a, j, i);
				}
			}
		}
	}
	
	static void BubbleSort1(int [] a, int n){
		int i = 0;
		int j = 0;
		for (i=0; i<=n; i++){
			for (j=i+1;j<=n; j++){
				if (a[j] < a[i]){
					swap(a, j, i);
				}
			}
		}
	}
	
	static void swap(int [] num,int j, int i){
		int temp;
		temp = num[i];
		num[i] = num[j];
		num[j] = temp;
	}
}

거품 정렬 초급 버 전
	static void BubbleSort1(int [] a, int n){
		int i = 0;
		int j = 0;
		for (i=0; i<=n; i++){
			for (j=i+1;j<=n; j++){
				if (a[j] < a[i]){
					swap(a, j, i);
				}
			}
		}
	}

엄격 한 의미 에서 볼 때 이것 은 순서 표를 교환 정렬 하 는 것 일 뿐 시간 복잡 도 는 O (N2) 로 분석 된다.또한 swap 작업 은 만족 후 값 이 현재 값 보다 작은 상황 에서 진행 되 기 때문에 후속 값 의 가장 작은 값 과 교환 하 는 것 이 아니 라 불필요 한 작업 이 많이 증가 합 니 다.
  •  거품 정렬 정식 판
    	static void BubbleSort2(int [] a, int n){
    		int i = 0;
    		int j = 0;
    		for (i=0; i<=n; i++){
    			for (j=n; j>=(i+1); j--){
    				if (a[j] < a[j-1]){
    					swap(a, j, i);
    				}
    			}
    		}
    	}
    

    이 버 전과 이전 버 전의 차 이 는 내부 순환 이 j = n 에서 시작 되면 효 과 는 바로 인접 비교, 작은 상승 이다. 이것 이 바로 거품 정렬 의 명명 유래 이다.이 알고리즘 은 매번 외부 순환 에서 작은 값 을 순서 표 앞으로 이동 합 니 다.하지만 우리 시 계 는 이미 순서 가 있 을 때, 단지 몇 분 의 다른 상황 일 까?우 리 는 최적화 조 치 를 가지 고 있다.
    거품 정렬 정식 최적화 판 
  • 	static void BubbleSort3(int [] a, int n){
    		int i = 0;
    		int j = 0;
    		boolean flag = true;
    		for (i=0; i<=n && flag==true; i++){
    			flag = false;
    			for (j=n; j>=(i+1); j--){
    				if (a[j] < a[j-1]){
    					swap(a, j, i);
    					flag = true;
    				}
    			}
    		}
    	}
    

    우리 가 플래그 비트 flag 를 추가 한 것 을 볼 수 있 습 니 다. 그러나 지난번 순환 이 순 서 를 바 꾸 지 않 았 을 때 표 가 질서 가 있 으 면 계속 순환 하지 않 는 다 는 것 을 설명 합 니 다.거품 정렬 의 시간 복잡 도 는 O (N2) 이다. 
    2. 간단하게 정렬 선택
    4. 567917. 메 인 프로그램 을 먼저 던 집 니 다. 4. 567918.
    package Sort;
    
    public class SimpleSelectSort {
    
    	public static void main(String[] args) {
    		int [] a = {8,4,5,2,1,7};
    		SimpleSelectSort1(a, 5);
    		for(int k = 0; k <= 5; k++){
    			System.out.println(a[k]);
    		}
    	}
    
    	static void SimpleSelectSort1(int [] a, int length){
    		int i,j,min;
    		for ( i=0; i<=length; i++) {
    			min = i;
    			for ( j=i+1; j<=length; j++) {
    				if (a[j] < a[min]) {
    					min = j;
    				}
    			}
    			if(i != min)
    				swap(a, i, min);
    		}
    	}
    	
    	static void swap(int [] num,int j, int i){
    		int temp;
    		temp = num[i];
    		num[i] = num[j];
    		num[j] = temp;
    	}
    }
    

    간단 한 선택 정렬 분석
    간단 한 정렬 의 원 리 는 n - i 차 키워드 간 의 비 교 를 통 해 n - i + 1 개 기록 에서 키워드 의 가장 작은 기록 을 선택 하여 i 차 기록 과 교환 하 는 것 이다.
    	static void SimpleSelectSort1(int [] a, int length){
    		int i,j,min;
    		for ( i=0; i<=length; i++) {
    			min = i;
    			for ( j=i+1; j<=length; j++) {
    				if (a[j] < a[min]) {
    					min = j;
    				}
    			}
    			if(i != min)
    				swap(a, i, min);
    		}
    	}
    

    단순 정렬 의 시간 복잡 도도 O (N2) 다.이들 의 시간 복잡 도 는 O (N) 이기 때문이다.앞으로 수필 에 소개 하 겠 습 니 다.

    좋은 웹페이지 즐겨찾기