Java/Java 수강일지

[수강일지_9] shorting (정렬), function (함수)

jamk-diary 2026. 5. 20. 18:06

정렬 (sorhing)

 

3-4-2-1-5

 

1-2-3-4-5- -> 오름 차순

5-4-3-2-1-_. 내림 차순 

 

언제 사용하나요? 

 

오름차순 : 입사순

내림차순: 성적순, 월급 순서 

 

tip 

구글에 정렬의 종류라고 검색하면 나온다 

정렬 방식 [1, 2, 3, 4, 5]특징시간 복잡도 (평균)비고
버블 정렬 인접한 두 원소를 비교하여 교환 O(n^2) 구현이 매우 간단하나 비효율적
선택 정렬 가장 작은 원소를 찾아 맨 앞으로 이동 \(O(n^2)\) 교환 횟수가 적음
삽입 정렬 원소를 적절한 위치에 '삽입'하여 정렬 \(O(n^2)\) 데이터가 거의 정렬되어 있을 때 효율적
병합 정렬 배열을 반으로 분할한 후 다시 합치며 정렬 \(O(n \log n)\) 안정 정렬, 데이터 크기만큼 추가 공간 필요
퀵 정렬 기준(Pivot)을 정해 큰 값과 작은 값으로 분할 \(O(n \log n)\) 일반적으로 가장 빠르지만 최악의 경우 \(O(n^2)\)
힙 정렬 힙(Heap) 트리 구조를 이용한 정렬 \(O(n \log n)\) 최대/최소값을 빠르게 찾을 때 유리
기수 정렬 자리수를 비교하여 데이터 정렬 (비교 연산 X) \(O(d \cdot n)\) 문자열이나 정수 정렬에 매우 빠름
💡 안정 정렬(Stable Sort)불안정 정렬(Unstable Sort) [1, 2]
  • 안정 정렬: 중복된 데이터의 원래 순서가 유지됨 (예: 병합 정렬, 삽입 정렬, 버블 정렬)
  • 불안정 정렬: 중복된 데이터의 원래 순서가 바뀔 수 있음 (예: 퀵 정렬, 선택 정렬, 힙 정렬) [1, 2, 3, 4]

10개만 정렬했을 때는 차이가 안 나는데 10만 개 등 많은 양의 정렬을 할 떄 차이가 확 난다. 

선택 정렬 O(n^2 , 퀵 정렬 O(n \log n) 이 중요하다. 

 

1. 선택정렬 이해하기 

->가장 작은 값을 찾아서맨 앞으로 보내기

 

sample 23 -  shorting 알아보기 

 


package sample23;

 

import java.text.Collator;

import java.util.Arrays;

import java.util.Comparator;

 

public class mainclass {

public mainclass() {

/*

정렬 (sorhing)

 

3-4-2-1-5

 

1-2-3-4-5- -> 오름 차순

5-4-3-2-1-_. 내림 차순

 

언제 사용하나요?

 

오름차순 : 입사순

내림차순: 성적순, 월급 순서

 

*/

int number[] = {4, 2, 3, 5 ,1};//배열에 숫자 막 정리해주기 why? 값을 담아놔야 정리할 수 있음

 

for (int i = 0; i < number.length -1; i++) {

//system.out.println ("i = + i+1");

 

for(int j = i+1;j < number.length; j++) {

//stste.out.println(\tj = "\tj = " = j);

if(number[i] > number [j]) { // -> 오름

//swap

int temp = number [i];

number[i] = number[j];

number[j] = temp;

}

}

}

 

System.out.println(Arrays.toString(number));

 

//for 사용할 때는 for 누르고 컨트롤 + 스페이스 눌러서 두번째거 사용하기

 

Integer array[] = {5,2,8,3,1} ;

//Arrays.sort(array); 오름이 된다

Arrays.sort(array, Comparator.reverseOrder());

System.out.println(Arrays.toString(array));

 

String fruits[] = { "banana" , "apple" , "grape"}; //문자열도 sorting 이 가능하다

Arrays.sort(fruits);

System.out.println(Arrays.toString(fruits));

 

 

}

}

 

sample 24 - function 함수 알아보기 

package sample24;

 

import java.util.Arrays;

 

public class mainclass {

 

public static void main(String[] args) {

/*함수

function: 함수 , processor (처리자 )

function 목적 : 코드의 간략화

동일한 처리 코드를 집약적으로 작성 가능하다

function 형식:

*( ) -> parameter, 매개변수, 인수, 인자

*자료형 가상인수 -> 변수

*{} 블록 필수 -> 블록 안에서 함수의 내부처리가 진행 된다

*return 값 -> return value (값)

* -> 자료형에 int 를 썼으면 return값은 int 가 오고 duoble 사용시 double 이 온다

자료형 함수명 ( 자료형 가상인수, 자료형 가상인수, ...... ) {

함수의 내부처리

return 값;

}

 

*/

 

// fouction 형식 활용해보기 - 예제 1

// * (int num, String str) -> parameter가 된다

// return 3 = int 값이 된다

// return 값 -> int = 돌려주는 값

int n = function(1, "hello");

System.out.println("n = " + n);

 

int number1, number2;

int result;

String operator;

 

number1 = 23;

number2 = 12;

operator = "+";

 

result = calculator(number1, number2, operator);

 

/*

switch(operator) {

case "+":

result = number1 + number2;

break;

case "-":

result = number1 - number2;

break;

}*/

 

 

 

char ch = 'G';

/*

int asc = ch;

asc = asc + 32;

char answer = (char)asc;

 

System.out.println("answer:" + answer);

*/

char ans = Lower(ch);

System.out.println("ans:" + ans);

 

 

//특정 숫자를 2배로 연산한 후에 돌려 주는 함수

int num = 3;

 

int number= numberDouble(num); //num ->argument ( = 실인수

 

System.out.println("number:" + number);

 

 

int array[] = {2, 4, 6};

 

// array = halfNumber (array);

// System.out.println(Arrays.toString(array));

 

}

 

 

 

 

// 함수의 정의 파라메터는 2개 첫번째 파라미터 int, 두번째 파라미터 문자열

static int function(int num, String str) {

 

//처리

System.out.println("function 호출");

 

return 3; // 리턴값(돌려주는 값) int

}

 

 

// 계산기

static int calculator(int n1, int n2, String oper) {

int res = 0;

 

switch(oper) {

case "+":

res = n1 + n2;

break;

case "-":

res = n1 - n2;

break;

}

 

return res;

}

 

static char Lower(char c) {

int asc = c;

asc = asc + 32;

char answer = (char)asc;

 

return answer;

}

 

//함수 정의

static int numberDouble (int num) { //num 은 외부에서 들어온 것 : 가(상)인수 parameter

int number;

 

number = num*2;

 

return number; //return 값은 int 로 ?

}

 

static int [] halfNumber (int []array) {

 

for (int i = 0; i < array.length; i++) {

array[i] = array [i]/2;

}

return array;

}

 

// return이 없는 함수

static void func() {

// func()들어가는 값도 void 나오는 값도 없는 함수 = return 값이 없는 함수

}

 

 

 

 

}

===============================================================================

function 호출

n = 3

ans:g

number:6