728x90
www.hackerrank.com/challenges/insertionsort1/problem
Algorithms > Sorting
배열의 크기와 배열이 주어지면, 해당 배열을 오름차순으로 정렬한다.
단, return 값은 없으며 정렬 과정을 출력해야 한다.
코드
void insertionSort1(int n, int arr_count, int* arr) { //n: 배열의 크기
int temp = arr[n - 1]; //비교할 값을 temp에 저장 (배열의 가장 오른쪽 숫자)
for (int i = n - 1; i >= 0; i--){
if (arr[i - 1] > temp){ //왼쪽 값이 temp보다 큰 경우
arr[i] = arr[i - 1]; //왼쪽 값을 현재 인덱스에 저장
for (int j = 0; j < n; j++) //배열 출력
printf("%d ", arr[j]);
}
else { //왼쪽 값이 temp보다 작거나 같은 경우
arr[i] = temp; //temp 값을 현재 인덱스에 저장
temp = arr[i - 1]; //왼쪽 값을 temp에 저장
for (int j = 0; j < n; j++) //배열 출력
printf("%d ", arr[j]);
break;
}
printf("\n");
}
}
설명
배열의 맨 오른쪽부터 정렬을 시작한다.
처음에 맨 오른쪽 값을 temp에 저장하고, 왼쪽으로 하나씩 비교해간다. (i: 5, arr: 2 4 6 8 3, temp: 3)
만약 왼쪽 값이 temp 보다 크면, 현재 인덱스를 왼쪽 값으로 바꾼다.
(i: 4, arr: 2 4 6 8 8, temp: 3), (i: 3, arr: 2 4 6 6 8, temp: 3), (i: 2, arr: 2 4 4 6 8, temp: 3)
만약 왼쪽 값이 temp 보다 작거나 같으면, 현재 인덱스를 temp로 바꾸고 왼쪽 값을 temp에 저장한 다음 break한다.
(i: 1, arr: 2 3 4 6 8, temp: 2)
728x90
'C & C++ > HackerRank' 카테고리의 다른 글
[HackerRank] Tree: Inorder Traversal (0) | 2021.05.19 |
---|---|
[HackerRank] Tree: Postorder Traversal (0) | 2021.05.13 |
[HackerRank] Tree: Preorder Traversal (0) | 2021.05.07 |
[HackerRank] Insertion Sort - Part 2 (0) | 2021.04.08 |
[HackerRank] Intro to Tutorial Challenges (0) | 2021.03.27 |