두 대기 열 이 대기 열 에서 요소 정렬 을 실현 합 니 다.
실현 방법 은 매번 대기 열 을 옮 겨 다 니 며 가장 작은 요 소 를 찾 아 임시 대기 열 에 넣 는 것 입 니 다. 옮 겨 다 니 는 과정 은 팀 을 나 가 는 과정 입 니 다. 한 요소 가 현재 의 최소 치보다 크 면 대기 열 에 넣 어야 합 니 다. 현재 의 최소 치보다 작 으 면 저장 합 니 다. 잠시 대기 열 에 넣 지 않 고 더 작은 것 을 발견 하면 원래 의 최소 치 를 넣 고 최소 치 를 업데이트 합 니 다.한 번 훑 어 본 후에 최소 값 을 임시 대기 열 에 저장 합 니 다.그 다음 에 두 번 째 로 옮 겨 다 니 기 시작 합 니 다. 원래 대기 열 을 옮 겨 다 닐 때마다 하나의 요 소 를 줄 이 는 것 을 주의 하 십시오. 따라서 모두 대기 열 N 번 을 옮 겨 다 니 며 대기 열 N, N - 1, N - 2.
최 악의 경우 주의: 최초의 대기 열 이 비 내림차 순 이 라면 많은 헛수고 를 할 수 있 으 므 로 원 대기 열 이 생 성 될 때 비 내림차 순 인지 동적 으로 판단 하고, 만약 그렇다면 원 대기 열 을 직접 인쇄 합 니 다.
#include<iostream>
#include<stdio.h>
using namespace std;
#define INF 99999999
#define MAXSIZE 100001
typedef struct {
int items[MAXSIZE];
int front;
int rear;
}Queue;
void initQueue(Queue *q){
q->front = q->rear = 0;
}
bool isEmpty(Queue *q){
return q->front == q->rear;
}
void AddQ(Queue *q, int item){
if ((q->rear + 1)%MAXSIZE == q->front)
{
// , rear front , , front=rear。
printf(" ");
return;
}
q->rear = (q->rear + 1) % MAXSIZE;
*(q->items + q->rear) = item;
}
int DeleteQ(Queue *q){
if (q->rear == q->front)
{
printf(" ");
return NULL;
}
q->front = (q->front + 1) % MAXSIZE;
return *(q->items + q->front);
}
int main(){
Queue q;
Queue tempQ;
initQueue(&q);
initQueue(&tempQ);
int N;
scanf("%d", &N);
int buffer;
bool isRising = true;
int last = 0, now = -1;
for (int i = 0; i < N; i++){
scanf("%d", &buffer);
AddQ(&q, buffer);
now = buffer;
if (i > 0 && now < last){
isRising = false;
}
last = now;
}
if (isRising)
{
printf("%d", DeleteQ(&q));
while (!isEmpty(&q))
{
printf(" %d", DeleteQ(&q));
}
printf("
");
return 0;
}
int min;
for (int i = 0; i < N; i++){
min = INF;
for (int j = i; j < N; j++){
buffer = DeleteQ(&q);
if (buffer < min){
if (min != INF) AddQ(&q, min);
min = buffer;
}
else{
AddQ(&q, buffer);
}
}
AddQ(&tempQ, min);
}
printf("%d", DeleteQ(&tempQ));
while (!isEmpty(&tempQ))
{
printf(" %d", DeleteQ(&tempQ));
}
printf("
");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.