simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 참조변수
  • JVM메모리구조
  • 404
  • 자바메모리구조
  • 자바프로그램
  • scanner #next() #nextLine()
  • 참조타입
  • 자바프로그래밍
  • controllerTest
  • 스프링
  • null
  • 자바
  • 컨트롤러

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

[검색] 선형탐색과 이진탐색
Computer Science/Algorithm

[검색] 선형탐색과 이진탐색

2022. 4. 12. 23:18

■ 선형검색 : 정렬되지 않은 데이터를 0부터 끝까지 확인할 때 유리

- 의사코드

for i from 0 to n-1
  if i'th element is the target value
     return true
  return false

- 자바코드

package linearSearch;

import java.util.Arrays;

public class LinearSearch1 {

	public static void main(String[] args) {
		int[] arr = new int[10];
		init(arr);
		System.out.println(Arrays.toString(arr));
		
		//linear search
		//전제 : 정렬되지 않은 데이터
		//찾으려는 수 : 5
		for (int i = 0; i < arr.length; i++) {
			if (arr[i]==5) {
				System.out.println("index : "+i);
				break;
			}
		}
	}
	
	public static void init(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random()*arr.length)+1;
			for (int j = 0; j < i; j++) {
				if (arr[i]==arr[j]) {
					i--;
					break;
				}
			}
		}
	}
}

>> 결과

[9, 3, 6, 8, 1, 5, 7, 4, 2, 10]
index : 5

 

■ 이진검색 : 정렬된 데이터들 안에서 특정 데이터를 찾을 때 유리

- 의사코드

*찾고자 하는 값이 50일 때,

if middle item is 50
	return true
else if 50 < middle item
	search left half
else if 50 > middle item 
	search right half

- 수학적 논리 : 중앙값을 지정한 후, left~right의 범위를 줄여가면서 logN의 속도로 탐색을 하는 방법

- 자바 코드

package BasicSearch;

public class _01_BinarySearch {

	public static void main(String[] args) {
		int[] arr = new int[] {1,2,3,4,5,6,7,8,9,10};
		int key = 3;
		
		int mid;
		int left = 0;
		int right = arr.length-1;
		while(left<=right) {
			mid = (left+right)/2;
			
			if(key==arr[mid]) {
				System.out.println("index : "+mid);
				break;
			}
			
			if(key < arr[mid]) {
				right = mid-1;
			}else if(key > arr[mid]) {
				left = mid+1;
			}
		}//end while
	}//end main

}

>> 결과

index : 2

 

 

※ 참조 : 자료구조에 대한 정리

https://why-dev.tistory.com/6?category=917883 

 

[컴퓨터 공학_복습] 알고리즘 정의, 검색과 정렬 알고리즘

심플한 개발 [컴퓨터 공학_복습] 알고리즘 정의, 검색과 정렬 알고리즘 본문 컴퓨터공학 [컴퓨터 공학_복습] 알고리즘 정의, 검색과 정렬 알고리즘 심플한 개발 2022. 1. 26. 17:27 Prev 1 ··· 3 4 5 6 7 Ne

why-dev.tistory.com

 

'Computer Science > Algorithm' 카테고리의 다른 글

[자료구조] 큐(Queue)  (0) 2022.04.28
[자료구조] 스택  (0) 2022.04.18
[자바의 정석] 스택과 큐  (0) 2022.03.30
[자바의 정석] ArrayList/LinkedList  (0) 2022.03.29
[자바의 정석] 컬렉션 프레임웍(Collection Framework) 기초  (0) 2022.03.29
    'Computer Science/Algorithm' 카테고리의 다른 글
    • [자료구조] 큐(Queue)
    • [자료구조] 스택
    • [자바의 정석] 스택과 큐
    • [자바의 정석] ArrayList/LinkedList
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바