List for(String temp : data){ strList.add(temp); } // 정렬 Default : ASC 오름차순 Collections.sort(strList); // 리스트 디버그 for(int i = 0 ; i < strList.size() ; i++){ System.out.println(" [" + i + "] " + strList.get(i)); } int dataLength = strList.size(); int index = new BinarySearch().binarySearch(dataLength, strList, target); System.out.println(" 검색하신 [" + target + "] 은 리스트를 오름차순으로 정리하였을때 [" + ind"> List for(String temp : data){ strList.add(temp); } // 정렬 Default : ASC 오름차순 Collections.sort(strList); // 리스트 디버그 for(int i = 0 ; i < strList.size() ; i++){ System.out.println(" [" + i + "] " + strList.get(i)); } int dataLength = strList.size(); int index = new BinarySearch().binarySearch(dataLength, strList, target); System.out.println(" 검색하신 [" + target + "] 은 리스트를 오름차순으로 정리하였을때 [" + ind"> List for(String temp : data){ strList.add(temp); } // 정렬 Default : ASC 오름차순 Collections.sort(strList); // 리스트 디버그 for(int i = 0 ; i < strList.size() ; i++){ System.out.println(" [" + i + "] " + strList.get(i)); } int dataLength = strList.size(); int index = new BinarySearch().binarySearch(dataLength, strList, target); System.out.println(" 검색하신 [" + target + "] 은 리스트를 오름차순으로 정리하였을때 [" + ind">
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class BinarySearch{
/// Fields
/// Constructor
public BinarySearch(){
}
/// Method
public static void main(String args[]){
// 데이터 정렬을 위해 ArrayList 생성
List<String> strList = new ArrayList<String>();
// 데이터 리스트
String[] data = {"쥐","소","호랑이","토끼","용","뱀","말","양","원숭이","닭","개","돼지"};
// 검색대상
String target = "용";
// String[] -> List
for(String temp : data){
strList.add(temp);
}
// 정렬 Default : ASC 오름차순
Collections.sort(strList);
// 리스트 디버그
for(int i = 0 ; i < strList.size() ; i++){
System.out.println(" [" + i + "] " + strList.get(i));
}
int dataLength = strList.size();
int index = new BinarySearch().binarySearch(dataLength, strList, target);
System.out.println(" 검색하신 [" + target + "] 은 리스트를 오름차순으로 정리하였을때 [" + index + "] 위치에 있습니다.");
}
/**
* 2진 검색 기능을 수행하는 메소드
* @param dataLength 데이터리스트의 길이
* @param strList 데이터리스트
* @param target 검색대상 문자열
* @return
*/
public int binarySearch(int dataLength, List<String> strList, String target){
int begin = 0;
int end = dataLength -1;
// 데이터가 1건이라도 있을 때 수행할 수 있도록 <= 사용
while (begin <= end) {
// 중간 값을 찾기 위해 2로 나눈다.
int mid = (begin + end) / 2;
// 검색대상이 리스트의 가운데 값과 같은지 체크
if(target.equals(strList.get(mid))) {
return mid;
} else {
// 검색대상값이 비교대상과 비교하여 -인 경우(사전순으로 앞에있는경우)
if(target.compareTo(strList.get(mid)) < 0){
end = mid - 1;
}
// 검색대상값이 비교대상과 비교하여 +인 경우(사전순으로 뒤에있는경우)
else {
begin = mid + 1;
}
}
}
return 0;
}
}