제로베이스 알고리즘(1~8)

ningbbang·2023년 4월 2일
0

Zerobase DS13

목록 보기
17/48

1. 선형검색
선형으로 나열되어 있는 데이터를 순차적으로 스캔하면서 원하는 값을 검색

nums = [4,7,10,2,4,7,0,2,7,3,9]
searchNum =7

nums_dic = []

searchResultIdx = -1
searchResultIdxs = []

nums.append(searchNum)
n = 0
while True:

    if nums[n] == searchNum:
        if n != len(nums)-1:
            searchResultIdx = n
            break
    n += 1

n = 0
while True:

    if nums[n] == searchNum:
        if n != len(nums) - 1:
            searchResultIdxs.append(n)
        else:
            break
    n += 1

print(f'nums : {nums}')
print(f'nums length : {len(nums)}')
print(f'searchResultIdxs : {searchResultIdxs}')
print(f'len(searchResultIdxs) : {len(searchResultIdxs)}')

if searchResultIdx < 0:
    print('not search index')
else:
    print(f'search index : {searchResultIdx}')

2. 이진검색
정렬되어 있는 데이터의 중앙값과 찾는 값을 비교하면서 원하는 값을 검색

datas = [1,2,3,4,5,6,7,8,9,10,11]

print(f'datas : {datas}')
print(f'datas length : {len(datas)}')

searchData = int(input('찾으려는 정수 입력:'))
searchResultIdx = -1

staIdx = 0
endIdx = len(datas)-1
midIdx = (staIdx + endIdx) // 2
midVal = datas[midIdx]

while searchData <= datas[len(datas) -1] and searchData >= datas[0]:

    if searchData == datas[len(datas)-1]:
        searchResultIdx = len(datas)-1
        break

    if searchData == datas[0]:
        searchResultIdx = 0
        break

    if searchData > midVal:
        staIdx = midIdx
        midIdx = (staIdx + endIdx) // 2
        midVal = datas[midIdx]
        print(f'midIdx : {midIdx}')

    elif searchData < midVal:
        endIdx = midIdx
        midIdx = (staIdx + endIdx) // 2
        midVal = datas[midIdx]
        print(f'midIdx : {midIdx}')

    elif searchData == midVal:
        searchResultIdx = midIdx
        break

print('찾으려는 값의 인덱스 : {}'.format(searchResultIdx))

3. 순위
수의 크고 작음을 이용해서 수의 순서를 정하는 것
중첩 for문 이용하여 모든 수를 비교

import random

nums = random.sample(range(50, 101), 20)
ranks = [0 for i in range(20)]
print(nums)
print(ranks)

for idx, num1 in enumerate(nums):
    for num2 in nums:
        if num1 < num2:
            ranks[idx] += 1

print(nums)
print(ranks)

for idx, num in enumerate(nums):
    print(f'nums : {num} \t ranks : {ranks[idx] + 1}')

4. 버블정렬
처음부터 끝까지 인접하는 인덱스의 값을 순차적으로 비교하면서 큰 숫자를 가장 끝으로 옮기는 알고리즘

nums = [10,2,7,21,0]
print(f'not sorted nums : {nums}')

length = len(nums)

for i in range(length):
    for j in range(length-1):
        if nums[j] > nums[j+1]:
            nums[j], nums[j+1] = nums[j+1], nums[j]

        print(nums)
    print()
print(f'sorted nums : {nums}')
profile
HR Anaylist!

0개의 댓글