[JAVA 기초 이론] 최대값, 최소값 찾기 알고리즘
: 값이 정렬되어있을 때 > 배열에서 사용
최대값 찾기 알고리즘
배열의 첫번째 값을 이미로 최대값으로 설정
최대값 위치도 0으로 초기화
int max=data[0];
int maxIndex=0;
for(data의 길이){
if(max<data[i]){
max보다 큰값을 발견하면 변화발생
max=data[i];
maxIndex=i;
}
}
ex)
public static void main(String[] args) {
// 상황) 학생 N명
// 총점수합
// 평균점수
// 1등이 몇번인지?
int[] stu=new int[5];
stu[0]=20;
stu[1]=12;
stu[2]=63;
stu[3]=87;
stu[4]=54;
// 출력
System.out.println("=== 학생 명단 ===");
for(int i=0;i<stu.length;i++) {
System.out.println("학생 "+(i+1)+"번은 "+stu[i]+"점입니다.");
}
System.out.println("====================");
// 총점수합
int sum=0;
for(int i=0;i<stu.length;i++) {
sum+=stu[i];
}
System.out.println("총점은 "+sum+"점입니다.");
double avg=sum*1.0/stu.length; // 형변환(casting)
System.out.println("평균은 "+avg+"점입니다.");
// [최대값 찾기 알고리즘]
int max=stu[0]; // 현재 최대값이 [0]에 존재하는 값이다!
int maxIndex=0; // 최대값이 저장된 index를 기억할 변수
// [1]부터 차례대로 '현재 최대값'과 비교
for(int i=1;i<stu.length;i++) {
if(max<stu[i]) { // 최대값이 현재비교값보다 작다면,
// 변화발생!
max=stu[i];
maxIndex=i;
}
}
System.out.println("1등은 "+(maxIndex+1)+"번학생이고, 점수는 "+max+"점입니다.");
}
최대값 디버깅표
i max<stu[i]
-----------------------------------------
1 stu[0]<stu[1] F
2 20<63 T -> max=stu[i];
maxIndex=i; i의 값 0 -> 2로 바뀜
3 63<87 T -> i의 값 2 -> 3으로 바뀜
4 87<57 F
= 3에서 마지막 T가 나왔기 때문에 최대값은 i가 3 해당
출력)
1등은 4번학생이고, 점수는 87점입니다.
최소값은 반대로 생각
for(data의 길이){
if(min>data[i]){
min보다 큰값을 발견하면 변화발생
min=data[i];
minIndex=i;
}
}