PTA 09 - 정렬 2 삽입 또는 병합 (25 점)
3837 단어 PAT 데이터 구조데이터 구조
According to Wikipedia:
Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list. Each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, and inserts it there. It repeats until no input elements remain.
Merge sort works as follows: Divide the unsorted list into N sublists, each containing 1 element (a list of 1 element is considered sorted). Then repeatedly merge two adjacent sublists to produce new sorted sublists until there is only 1 sublist remaining.
Now given the initial sequence of integers, together with a sequence which is a result of several iterations of some sorting method, can you tell which sorting method we are using?
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤100). Then in the next line, N integers are given as the initial sequence. The last line contains the partially sorted sequence of the N numbers. It is assumed that the target sequence is always ascending. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print in the first line either "Insertion Sort"or "Merge Sort"to indicate the method used to obtain the partial result. Then run this method for one more iteration and output in the second line the resuling sequence. It is guaranteed that the answer is unique for each test case. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line.
Sample Input 1:
10
3 1 2 8 7 5 9 4 6 0
1 2 3 7 8 5 9 4 6 0
Sample Output 1:
Insertion Sort
1 2 3 5 7 8 9 4 6 0
Sample Input 2:
10
3 1 2 8 7 5 9 4 0 6
1 3 2 8 5 7 4 9 0 6
Sample Output 2:
Merge Sort
1 2 3 8 4 5 7 9 0 6
함부로 분석:
분석 이 안 돼 서 자신 이 갈수 록 요리 가 빠 지 는 것 을 발견 했다. jpg
코드:
#include
#include
using namespace std;
int main() {
int N;
cin >> N;
int *a = new int[N];
int *b = new int[N];
for (int i = 0; i < N; i++) {
cin >> a[i];
}
for (int i = 0; i < N; i++) {
cin >> b[i];
}
int index;
for (index = 1; b[index] >= b[index - 1] && index < N; index++);
// !!!
int count = index;
while (count < N && a[count] == b[count]) {
count++;
}
if (count == N) {
cout << "Insertion Sort
";
sort(b, b + index + 1);
cout << b[0];
for (int i = 1; i < N; i++) {
cout << " " << b[i];
}
}
else {
cout << "Merge Sort
";
int length, flag = 1;// 2 b
for (length = 2; flag; length *= 2) {
for (int i = length; i < N; i += 2 * length) {
// length length*2 // length*=2
if (b[i - 1] > b[i]) {
flag = 0; break;// ,
}
}
}
cout << length;
// for length *2 flag , length
int i;
for (i = 0; i < N - length; i += length) {
sort(b + i, b + i + length);//
}
sort(b + i, b + N);//
cout << b[0];
for (int i = 1; i < N; i++) {
cout << " " << b[i];
}
}
}
//10
//3 1 2 8 7 5 9 4 6 0
//1 2 3 7 8 5 9 4 6 0
//
//Insertion Sort
//1 2 3 5 7 8 9 4 6 0
//10
//3 1 2 8 7 5 9 4 0 6
//1 3 2 8 5 7 4 9 0 6
//
//Merge Sort
//1 2 3 8 4 5 7 9 0 6
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Sparse Table을 아십니까? 나는 알고 있다.Sparse Table을 지금 배웠으므로, 메모를 겸해 씁니다. 불변의 수열의 임의의 구간에 대한 최소치/최대치를, 전처리 $O(N\log N)$, 쿼리 마다 $O(1)$ 로 구하는 데이터 구조입니다. 숫자 열의 값...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.