정렬 알고리즘: 삽입 정렬
시간복잡도는 O(N^2) 정도.. 처리되지 않은 데이터를 하나씩 집어서.. 왼쪽으로 한 칸씩 이동하며 알맞은 위치에 삽입시키는거라고 보면 될듯. array = [7,5,9,0,3,1,6,2,4,8] for i in range(1,len(array)): for j in range(i,0,-1): if array[j]
2022. 7. 15.
정렬 알고리즘: 계수정렬
계수정렬.. 조건만 잘 맞으면 퀵정렬보다 빠른.. 그런 정렬.. 시간복잡도가 O(N+K)라고한다. N은 숫자개수 K는 최대숫자 근데 이게.. 숫자들이 일단 정수여야함 그리고 배열을 하나 더 만들기 때문에 공간복잡도가 높음. 어떻게하냐면.. 배열을 쭉 돌면서 어떤 숫자가 몇번 나왔는지를 다 카운트함 그러고나서 그냥 0부터 시작해서~최대값까지 각 숫자를 카운트만큼 출력해주면됨 array = [7,5,9,0,3,1,6,2,9,1,4,8,0,6,2] count=[0]*(max(array)+1) for i in range(len(array)): count[array[i]]+=1 #각 숫자가 나오는 횟수를 셈.. for i in range(len(count)): for j in range(count[i]): pri..
2022. 7. 15.
정렬 알고리즘: 선택정렬
가장 작은 수를 찾아서 맨 앞이랑 바꾸고.. 그다음 또 작은수를 찾아서 맨앞으로 바꾸고... ' array=[7,5,9,0,3,1,6,2,4,8] for i in range(len(array)): min_idx=i for j in range(i+1,len(array)): if array[min_idx]>array[j]: min_idx=j array[i],array[min_idx]=array[min_idx],array[i] print(array) i번째 값과 i+1 ~ 끝까지의 범위 중 가장작은 값을 골라 i번째 값과 가장작은 값을 스왑 함
2022. 7. 15.