본문 바로가기
자료구조와 알고리즘/알고리즘

2.버블정렬

by oncerun 2020. 3. 9.
반응형

다음 숫자를 오름차순으로 나열하고 싶다면?

10 9 8 7 6 5 4 3 2 1

선택 정렬을 이용해 가장 작은 값을 반복적으로 앞으로 보냈다면

이번에 배울 버블 정렬은  인접한 옆 숫자끼리 비교해 더 작은 값을 앞으로 보내는 알고리즘입니다.

버블 정렬 알고리즘은 구현은 쉽지만 가장비효율적인 알고리즘입니다.

 

단순히 반복적으로 두 숫자를 비교하여 큰 숫자를 뒤로 보냅니다.

 

첫 번째 최댓값을 뒤로 보낼 때 (10,9), (10,8), (10,7), (10,6), (10,5), (10,4), (10,3), (10,2), (10,1) 9번의 연산을 해서 최댓값을 뒤로 보냄(n-1) 번

즉 두 번째 for문에 조건식이 9 8 7로 줄어야 하므로  9-i의 식으로 돌림.

public class algorithm02 {

	public static void main(String[] args) {
		int min =0 , 
			temp =0,
			index = 0;
			
		int[] array = {10,9,8,7,6,5,4,3,2,1};//index배열을 크기값10으로 초기화.및 선언
		
		for(int i =0; i <10; i++) {
			for(int j =0; j <9-i; j++) {
				if(array[j] >array[j+1]  ) {
					temp = array[j];   //큰 값을 임시변수에 담고
					array[j] = array[j+1]; //큰 값이있던 배열에 상대적으로 더적은 값을 담고
					array[j+1] = temp; // 상대적으로 더작은값에 temp에 저장했던 큰값을 담아 뒤로보냄.
				}
			}
		}
		for(int i =0; i <10; i++)
			System.out.printf("%d ",array[i]);
	}
}

 

 

복습

 

import java.util.Arrays;
import java.util.Scanner;

public class BubbleSort {
	

	public static void main(String[] args) {
		
		System.out.println("버블정렬");
		
		Scanner scan = new Scanner(System.in);
		
		String value = scan.nextLine();
		
		
		String[] arr = value.split(" ");
		int[] array = new int[arr.length];
		
		for(int i = 0; i < arr.length; i++) {
			
			array[i] = Integer.parseInt(arr[i]);
			
		}
		
		int temp = 0;
		
		long startTime = System.nanoTime();
		for(int i = 0; i < array.length; i++) {
			
			
			for(int j = 0; j < array.length-1-i; j++) {
				
				if(array[j] > array[j+1]) {
					
					temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}	
			
		}
		long endTime = System.nanoTime();
		
		System.out.println(endTime - startTime);
		System.out.println(Arrays.toString(array));
	}

}
반응형

'자료구조와 알고리즘 > 알고리즘' 카테고리의 다른 글

탐욕 알고리즘  (0) 2020.09.08
너비 우선 탐색 && 깊이 우선 탐색  (0) 2020.09.08
병합 정렬  (0) 2020.09.07
퀵 정렬  (0) 2020.08.13
3. 삽입정렬  (0) 2020.08.11

댓글