반응형
다음 숫자를 오름차순으로 나열하고 싶다면?
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 |
댓글