저번에 Array에 대해 배울때 쓴 코드를 단순화 시키는 과정이다.
package ex06;
public class BubbleEx01 {
public static void main(String[] args) {
int[] arr = { 40, 30, 10, 8, 5 };
if (arr[0] > arr[1]) {
int temp;
temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
if (arr[1] > arr[2]) {
int temp;
temp = arr[1];
arr[1] = arr[2];
arr[2] = temp;
}
if (arr[2] > arr[3]) {
int temp;
temp = arr[2];
arr[2] = arr[3];
arr[3] = temp;
}
if (arr[3] > arr[4]) {
int temp;
temp = arr[3];
arr[3] = arr[4];
arr[4] = temp;
}
System.out.println("=== 1번째 사이클 종료 ===");
System.out.println("\t" + arr[0] + " " + arr[1] + " " + arr[2] + " " + arr[3] + " " + arr[4] + "\n");
if (arr[0] > arr[1]) {
int temp;
temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
if (arr[1] > arr[2]) {
int temp;
temp = arr[1];
arr[1] = arr[2];
arr[2] = temp;
}
if (arr[2] > arr[3]) {
int temp;
temp = arr[2];
arr[2] = arr[3];
arr[3] = temp;
}
System.out.println("=== 2번째 사이클 종료 ===");
System.out.println("\t" + arr[0] + " " + arr[1] + " " + arr[2] + " " + arr[3] + " " + arr[4] + "\n");
if (arr[0] > arr[1]) {
int temp;
temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
if (arr[1] > arr[2]) {
int temp;
temp = arr[1];
arr[1] = arr[2];
arr[2] = temp;
}
System.out.println("=== 3번째 사이클 종료 ===");
System.out.println("\t" + arr[0] + " " + arr[1] + " " + arr[2] + " " + arr[3] + " " + arr[4] + "\n");
if (arr[0] > arr[1]) {
int temp;
temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
System.out.println("=== 4번째 사이클 종료 ===");
System.out.println("\t" + arr[0] + " " + arr[1] + " " + arr[2] + " " + arr[3] + " " + arr[4] + "\n");
System.out.println("== 정렬이 완료 되었습니다 ==");
System.out.println("\t" + arr[0] + " " + arr[1] + " " + arr[2] + " " + arr[3] + " " + arr[4]);
}
}
arr[0] 부터 arr[5]사이의 값이 모든 if문에 들어가있는게 보인다.
숫자가 1씩 증가한다? 바로 for문으로 단순화 할 수 있다.
package ex06;
import java.util.Arrays;
public class bubbleEx02 {
public static void main(String[] args) {
int[] arr = { 40, 30, 10, 8, 50,5 };
//사이클 단순화
for (int i = 0; i<5; i++) {
if (arr[i] > arr[i+1]) {
int temp;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
for(int i=0; i<arr.length; i++)
System.out.println(arr[i]);
System.out.println("=== 1번째 사이클 종료 ===");
for (int i = 0; i<4; i++) {
if (arr[i] > arr[i+1]) {
int temp;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("=== 2번째 사이클 종료 ===");
for (int i = 0; i<3; i++) {
if (arr[i] > arr[i+1]) {
int temp;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("=== 3번째 사이클 종료 ===");
for (int i = 0; i<2; i++) {
if (arr[i] > arr[i+1]) {
int temp;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("=== 4번째 사이클 종료 ===");
for (int i = 0; i<1; i++) {
if (arr[i] > arr[i+1]) {
int temp;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("=== 5번째 사이클 종료 ===");
System.out.println("== 정렬이 완료 되었습니다 ==");
System.out.println(Arrays.toString(arr));
}
}
좀더 보기 편하고 간결하게 변했다.
코드에 일부를 잠시 설명하자면 다음과 같다
for (int i = 0; i<5; i++) { // 5번반복
if (arr[i] > arr[i+1]) { // arr[0] > arr[1]과 같은말.
int temp; // 변수값 스위칭을 위한 코드
temp = arr[i]; // arr[0]의 값을 temp에 대입
arr[i] = arr[i+1]; // arr[1]의 값을 arr[0]에 대입
arr[i+1] = temp; // temp의 값을 arr[1]에 대입
}
}
for(int i=0; i<arr.length; i++) // i<arr.lebgth; = arr안의 값의 갯수 즉 5를 의미
System.out.println(arr[i]); // 0~5까지의 값을 출력
System.out.println("=== 1번째 사이클 종료 ===");
여기서 눈여겨 볼 것은
for (int i = 0; i<5; i++) { // 5번반복
~
System.out.println("=== 1번째 사이클 종료 ===");
i<5 부분이다. 코드를 자세히 보면 5에서 1씩 감소하는 모습이다. 이것도 for로 줄여보자.
덤으로 1번째 사이클 종료의 숫자도 바꿔보자.
package ex06;
import java.util.Arrays;
public class bubbleEx03 {
public static void main(String[] args) {
int[] arr = { 40, 30, 10, 8, 5, 50 };
int n=1;
int k=arr.length;
for (int i = 0; i<k-1; i++) {
if (arr[i] > arr[i+1]) {
int temp;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("=== "+n+"번째 사이클 종료 ===");
n++;
for (int i = 0; i<k-1; i++) {
if (arr[i] > arr[i+1]) {
int temp;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("=== "+n+"번째 사이클 종료 ===");
n++;
for (int i = 0; i<k-1; i++) {
if (arr[i] > arr[i+1]) {
int temp;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("=== "+n+"번째 사이클 종료 ===");
n++;
for (int i = 0; i<k-1; i++) {
if (arr[i] > arr[i+1]) {
int temp;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("=== "+n+"번째 사이클 종료 ===");
for (int i = 0; i<k-1; i++) {
if (arr[i] > arr[i+1]) {
int temp;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("=== "+n+"번째 사이클 종료 ===");
System.out.println("== 정렬이 완료 되었습니다 ==");
System.out.println(Arrays.toString(arr));
}
}
int n =1;을 하나 적어 n번째 사이클 종료 라고 표시했다.
int k = arr.length; 를 응용하여 5부터 for문을 거칠때 마다 1씩 감소하게 적었다.
여기서 더 줄일수도 있다. 똑같은 for문을 5개나 적었기 때문에.
package ex06;
import java.util.Arrays;
public class bubbleEx04 {
public static void main(String[] args) {
int[] arr = {40, 30, 10, 8, 5, 50};
int n = 1;
int k = arr.length;
for (int j = 0; j < k; j++) {
for (int i = 0; i < k - 1; i++) {
if (arr[i] > arr[i + 1]) {
int temp;
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("=== " + n + "번째 사이클 종료 ===");
n++;
}
System.out.println("== 정렬이 완료 되었습니다 ==");
System.out.println(Arrays.toString(arr));
}
}
한 화면에 들어오지도 않던 첫번째 코드는 어디가고
줄이고 줄이다 보니 간결해진 모습으로 나타났다.
이런식으로 패턴을 파악하여 코드를 줄여나가는 것을 많이 연습해야 한다.