IT/알고리즘
1일 1코딩
So1_b
2022. 4. 16. 16:59
이진 검색
package chap03;
public class Q4 {
static String[] sign= {
" |", //0
"---+", //1
"<- ", //2
" + ", //3
" ->" //4
};
//자리수 세기
static int blank(int n) {
int count=1;
while(n>9) {
n/=10;
count++;
} return count;
}
static void BinarySearch(int[] a, int n, int key) {
int pl=0; int pr=n-1; int pc=(pl+pr)/2;
int num=n*4;
int j;
//배열 요소값 저장하기 + 인덱스 출력
StringBuffer sb=new StringBuffer(a.length);
System.out.print(sign[0]+" ");
for(int i=0;i<a.length;i++) {
j=blank(a[i]);
sb.append(" ");
if(j==1) sb.append(" "+a[i]+" ");
else if(j==2) sb.append(" "+a[i]);
else if(j==3) sb.append(a[i]);
System.out.printf("%-4s",i);
}
//2행 출력
System.out.print("\n"+sign[1]);
do {
System.out.print("-");
}while(num-->0);//먼저실행 1+ 20
System.out.println();
//
for(int i=0;i<n;i++) { //a.length회 반복한다.
int idx=0; //<- + -> 가 그려질 인덱스 위치
System.out.print(sign[0]);
do {
System.out.print(" ");
if(pl==idx) System.out.print(sign[2]); // <-
else if(pc==idx) System.out.print(sign[3]); // +
else if(pr==idx) System.out.print(sign[4]+"\n"); // ->
else System.out.print(" ");
idx++;
}while(idx<=pr); //0~n-1회 + 먼저 실행 1
System.out.print(" "+pc+"|");
System.out.print(sb+"\n");
if(a[pc]==key) {System.out.printf("%d은/는 a[%d]에 있습니다.",key,pc); return;}
else if(a[pc]>key) {pr=pc-1;}
else if(a[pc]<key) {pl=pc+1;}
pc=(pl+pr)/2;
if(pl>pr) return;
//pl과 pr서로 값이 맞물리면 종료
System.out.println(sign[0]);
}
}
public static void main(String[] args) {
int[] a= {1,2,3,5,6,8,9};
BinarySearch(a,a.length,2);
//System.out.println("실행이 되나?");
}
}
결과