[두다지 week1] 버블, 선택, 삽입 정렬

develop, algorism, sort, quiz, dudaji
written byzuhern1zuhern

in

2019. 02. 10


참조

버블정렬
선택정렬
삽입정렬


연습

버블 정렬

버블정렬 wiki

  1. 왼쪽에서 출발
  2. 1-2 비교, 2가 더 작으면 교환, 아님 패스
  3. 2-3 비교, 3이 더 작으면 교환, 아님 패스
  4. 맨 오른쪽 부터 정렬됨
def sort_bubble_start(arr):
  
  # print arr
  var result = sort_bubble(arr, len(arr))
  return 

def sort_bubble(arr, arr_size):

  if arr_size < 2:
    # print arr
    return arr

  for i in range(arr_size-1):
    if arr[i] > arr[i + 1]:
      arr[i], arr[i + 1] = arr[i + 1], arr[i]
    print arr 

  return sort_bubble(arr, arr_size-1)

선택 정렬

선택정렬 wiki

  1. 왼쪽부터 출발
  2. 1번인 내가 제일 작은 숫자로 min 지정
  3. 내 오른쪽부터 min이랑 비교, 더 작으면 min으로 지정
  4. 그렇게 리스트에서 제일 작은 애 찾아서
  5. 나랑 자리 바꿈
def sort_select(arr):
  
  # print arr
  arr_size = len(arr)

  for i in range(arr_size):
    
    min_index = i

    for j in range(arr_size - i):
      tar_index = j + i
      if arr[tar_index] < arr[min_index]:
        min_index = tar_index

    if i != min_index:
      arr[i], arr[min_index] = arr[min_index], arr[i]
    
    # print arr

  return arr

삽입 정렬

삽입정렬 wiki

  1. 왼쪽부터 출발
  2. 내 왼쪽 리스트 중에 나보다 작은수, 나보다 큰수 사이로 삽입 -> (내 왼쪽은 정렬이 되어있으므로 나보다 작은수 처음 발견했을 때 바로 뒤에 꽂으면 됌)
def sort_insert(arr):

  arr_size = len(arr) - 1

  for i in range(arr_size):
    
    start_index = i + 1
    tar_val = arr[start_index]
    j = start_index

    while j > 0 and tar_val < arr[j-1]:
      arr[j] = arr[j-1]
      j -= 1

    arr[j] = tar_val
    
  return arr

테스트 코드

import unittest
import sort

class TestSort(unittest.TestCase):
    def setUp(self):
        self.test_array = [
            [10, 7, 17, 3, 4, 21, 6, 20, 1],
            [10, 7, 17, 3, 4, 21, 6, 20, 1, 9],
            [7, 6, 5, 4, 3, 2, 1],
            [1, 2, 3, 4, 5, 6, 7],
            [3, 3, 4, 3, 6, 5, 6, 4, 3, 4, 6, 3],
            [1],
            [2, 10],
            [10, 2],
            [],
        ]


    def tearDown(self):
        del self.test_array


    def test_bubble(self):
        for array in self.test_array:
            self.assertEqual(sort.sort_bubble_start(array), sorted(array))


    def test_insertion(self):
        for array in self.test_array:
            self.assertEqual(sort.sort_insert(array), sorted(array))


    def test_selection(self):
        for array in self.test_array:
            self.assertEqual(sort.sort_select(array), sorted(array))


unittest.main()

선택정렬을 이용하여 문제풀이

삽입정렬을 이용하여 문제풀이