오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)
1, 3, 5, 4 라는 숫자들이 있다면
먼저 1과3을 비교하여 우측이 크니까 그대로 두고,
다음 3과5을 비교 --> 우측이 크니까 그대로 둔다.
다음 5와4를 비교 --> 우측이 크지 않으므로 4와5가 자리를 바꾼다.
맨우측에 있는것이 최대값이 된다.
숫자가 n개이면 비교는 n-1번 수행한다.
방법1의 결점인 충분히 작은 수를 설정해야 하는 번거러움은 없다.
단점으로는 비교.교환 완료후 숫자의 배열상태가 달라진다.
아래의 예제를 보자....
import java.io.*;
import java.util.*;
class Max2 {
public static void main(String[] args) throws IOException {
int[] array = new int[20];
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("콤마(,)로 구분하여 숫자들을 입력하세요...");
String digits = br.readLine();
StringTokenizer st = new StringTokenizer(digits, ",");
for(int i=0; st.hasMoreElements(); i++) {
array[i] = Integer.parseInt(st.nextToken());
}
int tmp=0;
for(int i=0; i < array.length-1; i++) {
if (array[i] > array[i+1]) {
tmp = array[i];
array[i] = array[i+1];
array[i+1] = tmp;
}
}
System.out.println("최대값은 : " + array[array.length-1]);
}
}
아래의 예제는 작업전후 배열이 바뀌므로 이를 arraycopy로 보관해 둔다.
import java.io.*;
import java.util.*;
class Max3 {
public static void main(String[] args) throws IOException {
int[] array = new int[20];
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("콤마(,)로 구분하여 숫자들을 입력하세요...");
String digits = br.readLine();
StringTokenizer st = new StringTokenizer(digits, ",");
for(int i=0; st.hasMoreElements(); i++) {
array[i] = Integer.parseInt(st.nextToken());
}
int [] newArray = new int[array.length];
System.arraycopy(array, 0, newArray, 0, array.length);
int tmp=0;
for(int i=0; i < newArray.length-1; i++) {
if (newArray[i] > newArray[i+1]) {
tmp = newArray[i];
newArray[i] = newArray[i+1];
newArray[i+1] = tmp;
}
}
System.out.println("최대값은 : " + newArray[array.length-1]);
}
}
댓글 없음:
댓글 쓰기