[04]sort,algorithm,Math클래스

Sort 정렬

특정한 키(key field)를 기준으로 순서대로 재배치

  1. 정렬의 유형
    • 오름차순 ascending ASC : 1 > 10 , A > Z , a > z , ㄱ > ㅎ
    • 내림차순 descending DESC
    • 앞이 크면 뒤로 바꾸는게 오름차순, 뒤가 크면 앞으로 바꾸는 것이 내림차순
  2. 정렬의 방법
    • 삽입정렬(insertion sort)
    • 선택정렬(selection sort)
    • 버블정렬(bubble sort)
    • quick sort , shell sort , ~

선택정렬(selection sort)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
if(>){tmp=a,a=b,b=tmp} swap시킴. > 정렬

9 7 5 3 1 >> 1 3 5 7 9
a a+1 a+2 ~

앞에 있는 수가 크면 바꾼다
첫번째 수를 2,3,4,5 차례로 비교한다.

> 9 7 5 3 1 > 시작
> 7 9 5 3 1 > 첫번째 수인 9랑 두번째 7를 비교 9>7 맞음 순서바꾼거.
> 5 9 7 3 1 > 첫번째 수와 세번째 수를 비교 7>5 맞음, 순서바꾼거.
> 3 9 7 5 1 > 첫번째 수와 네번째 수 비교 5>3 맞음, 순서바꾼거.
> 1 9 7 5 3 > 첫번째, 마지막 수 비교 3>1 맞음, 순서바꾼거.
 ----------------step 1
 두번째부터비교(세번째,네번째,다섯번째와 비교)
> 1 7 9 5 3
> 1 5 9 7 3
> 1 3 9 7 5
----------------step 2
세번째부터 비교(네번쨰,다섯번째와 비교)
> 1 3 7 9 5
> 1 3 5 9 7
----------------step 3
네번째부터 비교(다섯번째와 비교)
> 1 3 5 7 9
4단계만에 sort 성공.
----------------step 4

만일  sort하고자 하는 대상이 n개라면 단계는 n-1단계
a번째라면 내 옆은 a+1번째.

버블정렬(bubble sort)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
if(>){tmp=a,a=b,b=tmp} swap시킴. > 정렬

9 7 5 3 1 >> 1 3 5 7 9

앞에 있는 수가 크면 바꾼다.
처음과 두번째 비교, 두번째 세번째 비교, 세번째와 네번째 비교.

9 7 5 3 1 > 시작! 
7 9 5 3 1 > 9>7 맞음 바꿈 나머지는 그대로.
7 5 9 3 1 > 9>5 비교, 맞음. 바꾸고 나머지는 그대로.
7 5 3 9 1 > 9>3 맞음, 바꾸고 나머지 그대로
7 5 3 1 9 > 9>1 맞음, 바꾸고 나머지 그대로
---------------------------------------step 1
한바퀴를 돌아도 sort가 안됐어도 처음부터 똑같이 비교한다.
5 7 3 1 9 > 7>5 맞음, 바꿈
5 3 7 1 9 > 7>3 맞음
5 3 1 7 9 > 7>1 맞음
5 3 1 7 9 > 7>9 틀림 안바꿈.
---------------------------------------step 2
3 5 1 7 9 > 5>3 맞음 
3 1 5 7 9 > 5>1 맞음
3 1 5 7 9 > 5>7 틀림 안바꿈
---------------------------------------step 3
1 3 5 7 9 > 3>1 맞음 바꿈. 마지막!
4단계만에 sort 성공.
---------------------------------------step 4

Arrays 클래스를 이용해서 정렬하기

1
2
3
4
5
6
7
8
9
int[] su={9,7,5,3,1};

Arrays.sort(su);  //ascending sort 오름차순.

		for(int idx=0;idx<su.length;idx++){
			System.out.print(su[idx]+" ");
		
		}//for 출력값 1 3 5 7 9
		

algorithm 유형

  1. 정렬
1
if(>){tmp=a,a=b,b=tmp} swap시킴.
  1. 등수구하기
1
f(자신< ){rank++}
  1. 로또
1
if(자신==){random() 다시발생} 

Math 클래스

수학관련 클래스

클래스명.함수

  • 절대값 : Math.abs();
  • 올림 : Math.ceil();
  • 버림 : Math.floor();
  • 반올림 : Math.round();
  • 최댓값 : Math.max(a,b);
  • 최솟값 : Math.min(a,b);
  • 원주율 : Math.E
  • 파이 : Math.PI
1
2
return값이 있으면 중복해서 사용가능
Math.max(7,Math.max(5,6));

Math클래스에서 제일 많이 사용되는 함수

  • random 무작위
  • 난수 : random 값
  • 자바에서 랜덤값 발생범위는 0.0 <= 1.0 , double형으로 나옴.
1
2
3
4
5
System.out.println(Math.random());
//컴파일 할때마다 랜덤으로 0.~ double형으로 나옴

System.out.println((int)(Math.random()*2));	//0 또는 1 
											//2는 안나옴 										

(int)(Math.random()*n); 을 하면 나오는 수는 n-1까지 나옴.

0부터 n-1

만약 1부터 구하고 싶으면(ex. 주사위, 로또) +1을 한다.

  • 주사위
    • (int)(Math.random()*6+1) > 0~5지만 +1 해서 1~6
  • 로또번호 : 1~45
    • (int)(Math.random()*45+1) > 0~44 지만 +1해서 1~45