C언어 pancake sorting 질문드립니다.
조회수 38회
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/// 함수 선언
void flip(int arr[], int i);
int findMax(int arr[], int n);
void pancakeSort(int arr[], int n);
// 배열 요소를 뒤집는 함수
void flip(int arr[], int i)
{
int temp, start = 0;
while (start < i)
{
temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
start++;
i--;
}
}
// 배열에서 최대값의 인덱스를 찾는 함수
int findMax(int arr[], int n)
{
int max = 0;
for (int i = 0; i < n; ++i)
{
if (arr[i] > arr[max])
max = i;
}
return max;
}
// 팬케이크 정렬 함수
void pancakeSort(int arr[], int n)
{
for (int curr_size = n; curr_size > 1; --curr_size)
{
int max = findMax(arr, curr_size);
if ((max != curr_size - 1) && (max != 0))
{
flip(arr, max);
printf("%d ", n - max);
}
if ((max != curr_size - 1) && (max == 0))
{
flip(arr, max);
flip(arr, curr_size - 1);
printf("%d ", n - (curr_size - 1));
}
}
printf("0\n");
}
int main()
{
int arr[] = { 5, 1, 2, 4, 3 };
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original Array: ");
for (int i = 0; i < n; ++i)
printf("%d ", arr[i]);
printf("\n");
pancakeSort(arr, n);
printf("Sorted Array: ");
for (int i = 0; i < n; ++i)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
이렇게 했는데 중간에 몇번째 층(가장 오른쪽 숫자가 1층이라고 했을때)에서 뒤집는지를 순서대로 출력해야하는데 '1 4 2 0' 이 아니라 '1 4 3 0' 으로 출력됩니다. 어떻게 고쳐야 제대로 출력할 수 있을까요? 조언 부탁드립니다 감사합니다
댓글 입력