본문 바로가기

알고리즘

정렬 3종세트 퀵, 선택, 삽입정렬

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
nodes = [6,5,1,4,0,8,7,2,3,3,2,2,2,9,-11];
 
def quick(start,end):
  if start >= end: return;
  pivot = start;
  left = start;
  right = end;
  while left <= right:
    while left <= end and nodes[left] <= nodes[pivot] :
      left += 1;
    while right > start and nodes[right] >= nodes[pivot]:
      right -= 1;
    if left <= right:
      nodes[left] , nodes[right] = nodes[right], nodes[left];
    else:
      nodes[pivot], nodes[right] = nodes[right], nodes[pivot];
      quick(start, right - 1);
      quick(right + 1, end);
  
        
quick(0,14);
print(nodes);
 
 
nodes = [6,5,1,4,0,8,7,2,3,9,-11,3,-9];
def select_sort():
  start = 0;
  while start <= len(nodes) - 2:
    min = start;
    for i in range(start,len(nodes)) :
      if nodes[i] < nodes[min]: min = i;
    nodes[start], nodes[min] = nodes[min], nodes[start];
    start += 1;
 
select_sort();
print(nodes)
 
 
nodes = [6,5,1,4,0,8,7,2,3,9,-11,3,-9];
def insert_sort():
  left = 0;
  while left <= len(nodes) - 2:
    current = left + 1;
    idx = current;
    for i in range(current,-1,-1):
      if nodes[i] < nodes[current]:
        break;
      else:
        idx = i;
        continue;
    temp = nodes.pop(current);
    nodes.insert(idx,temp);
    left += 1;
 
insert_sort();
print(nodes)
cs
1. 퀵정렬
전체 리스트를 피벗 기준으로 작은건 왼쪽, 큰컨 오른쪽으로 정렬한 뒤에 작은것들은 하나의 리스트로, 큰걸 하나의 리스트로 한 후 재귀적으로 반복한다.
2. 선택정렬
정렬이 안된 부분 중 가장 작은 것을 선택해 정렬 된 부분의 맨 뒤편에 삽입한다.
3. 삽입정렬
정렬이 안된 부분 중 맨 앞의 것을 선택한 다음, 정렬 된 부분에서 자기 자리를 알아낸 다음 삽입한다.

'알고리즘' 카테고리의 다른 글

백준 1743 음식물 피하기  (0) 2022.10.29
백준 2075 N번째 큰 수  (1) 2022.10.27
백준 1935번 후위표기식2  (0) 2022.10.27
백준 5397 키로거  (0) 2022.10.27
그래프 최단거리 알고리즘  (0) 2022.10.26