본문 바로가기
👋국비 후기 모음👋 (이력도 확인 가능!)
개발/자바

자바 배열이란? // 배열 정렬, Bubble Sort

by 킴뎁 2021. 1. 19.
728x90
반응형

배열, Array

같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스(index)를 부여해 놓은 자료구조.

변수는 한 개의 데이터만 저장할 수 있다. 저장해야할 데이터의 수가 많아지면 그만큼 많은 변수가 필요하다. 이러한 경우 좀 더 효율적인 방법으로 프로그래밍하기 위해 배열이 필요하다.

 

배열 선언

데이터타입[] 배열명;  -> 추천

int[] arr;
char[] chArr;
double[] dbArr;
String[] strArr;

데이터타입 배열명[];  -> 비추천

int arr[];
char chArr[]
double dbArr[]
String strArr[];

왜 위가 추천 아래가 비추천인지는 모르겠지만 강사님이 추천하는 방식으로 쓰기 시작함. 현업에서 위의 방법이 더 자주 쓰이나?

 

배열 생성

* 값 목록으로 배열생성 (배열 선언과 동시에 초기화)

-> 데이터타입[] 배열명(변수) = { 값0, 값1, 값2, 값3, ... };

int[] arr = { 1, 2, 3, 4, 5 };
String[] names = { "James", "Mike", "Tom" };

배열의 인덱스는 0부터 시작한다.

for(int i=0; i<5; i++) {
	System.out.println("arr[" + i + "] = " + arr[i]);
}
=====================
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
names[0] = James
names[1] = Mike
names[2] = Tom

 

※ 값 목록으로 배열 생성할 때는 무조건 선언과 동시에 초기화를 해줘야한다.

데이터타입[] 변수; //선언 후

변수 = { 값0, 값1, 값2, ...} // 초기화 -> 에러.

public class test {
	public static void main(String[] args) {
		int[] arr;
		arr = {1, 2, 3}; //Array constants can only be used in initializers 에러발생
	}
}

 

* new 연산자로 배열 생성

 -> 데이터타입[] 배열명(변수) = new 데이터타입[길이];

// 둘 다 가능
int[] arr = new arr[5]; 
arr[0] = 11;
arr[1] = 22;
arr[2] = 33;
arr[3] = 44;
arr[4] = 55;

double[] dbArr; 
dbArr = new dbArr[3]; 
dbArr[0] = 1.1;
dbArr[1] = 2.2;
dbArr[2] = 3.3;

 

 

배열 정렬

버블 정렬, Bubble Sort;

각 round의 알고리즘

  • 0번째 요소와 인접한 요소를 비교한다
  • 왼쪽의 데이터가 크면 스왑한다(오름차순)
  • 이방법을 마지막 두 요소까지 진행(반복)

1번 알고리즘을 이용하여 모든 요소가 정렬될 때까지 반복한다

  • 각 Round가 진행될 때마다 가장 오른쪽 1개의 요소가 정렬된 상태가 된다
  • 각 round가 진행되면 정렬해야하는 요소가 하나씩 줄어든다

버블정렬 한번 반복했을때 가장 큰 값이 가장 오른쪽으로 밀려남 (정렬 완료)

3 2 5 4 1

2 3 4 1 5  - 1 round

2 3 1 4.   -  2 round

2 1 3       -  3 round

1 2          -  4 round

public class BubbleSort {
	public static void main(String[] args) {
		
		int[] arr = {3,2,5,4,1};
		
		
		//--원본 출력---
		System.out.println("---정렬 전 ---");
		for(int i=0; i< arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		//-------------------
		
        System.out.println("---정렬 진행---");
		//----버블 정렬----
		for(int j=0; j<arr.length-1; j++) { //(length-1) round 반복, 4round 반복함
			for(int i=0; i<arr.length-1-j; i++) { //각 round
				if( arr[i] > arr[i+1]) {
					//스왑
					int tmp = arr[i];
					arr[i] = arr[i+1];
					arr[i+1] = tmp;
				}
			}
			for(int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
			}
			System.out.println();
			
		}
		
		//--- 정렬된 이후 출력---
		System.out.println("----정렬 후---");
		for(int i=0; i< arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
//		
	}
}
===============================
    ---정렬 전---
    3 2 5 4 1 
    ---정렬 진행---
    2 3 4 1 5 
    2 3 1 4 5 
    2 1 3 4 5 
    1 2 3 4 5 
    ----정렬 후---
    1 2 3 4 5 

 


kimdevel.tistory.com/46?category=909475

 

자바 국비 8일차. 배열 타입 / 배열 정렬 등등. 월요일은 힘들어...

21. 01. 18 (월) - Week 3. Start 오늘 수업은 조금 어려웠다. 참조 타입인 배열을 배웠다. 나름 이 부분을 공부하고 수업을 들었기에 여태까지 수업 들었을 때처럼 어느정도 자신은 있었는데 막상 수업

kimdevel.tistory.com

반응형
👋국비 후기 모음👋 (이력도 확인 가능!)

댓글