
=(1/n) * (1+2+3+... +n) = (n+1)/2def sequentialSearch(a, n, key): # a가 검색대상, n이 검색할 인덱스, key는 찾는 키 값
i <- 0
**while i < n and a[i]!=key:** # i가 존재하는 범위안에 있고 (선조건)
i <- i + 1
if i < n: return i # 두번째 조건때문에 종단된 경우라면 리턴
else : return -1

def sequentialSearch2(a, n, key):
i <- 0
while i < n and a[o] < key:
i <- i + 1
if i < n and a[i] == key: # 검색 성공한 경우
return i
else?
return -1

더이상 찾을만한 구간이 남아있지 않으면 검색 실패!
def binarySearch(a, N, key)
start = 0
end = N -1
while start <= end : # 검색 구간이 남아있으면
middle = (start + end)//2 # 중간 위치 검색
if a[middle] == key: # 검색 성공
return true
elif a[middle] > key:
end = middle - 1
else:
start = middle + 1
return false # 검색 실패
인덱스라는 용어는 Database에서 유래했으며, 테이블에 대한 동작 속도를 높여주는 자료 구조
Database 분야가 아닌 곳에서는 Look up table 등의 용어 사용
필요한 디스크 공간은 보통 테이블을 저장하는데 필요한 디스크 공간보다 작다 보통 인덱스는 키-필드만 가지고 있고, 테이블의 다른 세부 항목들은 갖고 있지 않기 때문
원본 데이터에 데이터 삽입될 경우 상대적으로 크기가 작은 인덱스 배열을 정렬하기 때문에 속도가 빠르다
미정렬 원소가 하나 남은 상황에서는 마지막 원소가 가장 큰 값을 갖고 종료하고 선택 정렬이 완료된다def selectionSort(a, N):
for i in range(N - 1):
minIdx = i
for j in range(i + 1, N):
if a[minIdx] > a[j]:
minIdx = j
a[i], a[minIdx] = a[minIdx]. a[i] # 두 개가 다를 때만 교환하라는 조건 필요없음
*if i != minIdx

