PTA 09-排序3 Insertion or Heap Sort (25分)
題目地址
https://pta.patest.cn/pta/test/16/exam/4/question/676
?
5-14?Insertion or Heap Sort???(25分)
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.
Heap sort?divides its input into a sorted and an unsorted region, and it iteratively shrinks the unsorted region by extracting the largest element and moving that to the sorted region. it involves the use of a heap data structure rather than a linear-time search to find the maximum.
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?NN?(\le 100≤100). Then in the next line,?NN?integers are given as the initial sequence. The last line contains the partially sorted sequence of the?NN?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 "Heap 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 0Sample Output 1:
Insertion Sort 1 2 3 5 7 8 9 4 6 0Sample Input 2:
10 3 1 2 8 7 5 9 4 6 0 6 4 5 1 0 3 2 7 8 9Sample Output 2:
Heap Sort 5 4 3 1 0 2 6 7 8 9/* 評測結果 時間 結果 得分 題目 編譯器 用時(ms) 內存(MB) 用戶 2017-07-06 18:04 答案正確 25 5-14 gcc 14 1 測試點結果 測試點 結果 得分/滿分 用時(ms) 內存(MB) 測試點1 答案正確 7/7 1 1 測試點2 答案正確 6/6 2 1 測試點3 答案正確 2/2 1 1 測試點4 答案正確 2/2 2 1 測試點5 答案正確 4/4 14 1 測試點6 答案正確 4/4 14 1 */ #include<stdio.h> #define MAXN 100 int A[MAXN],B[MAXN],tmp[MAXN]; int gNextTurnToPrint=0; int gPrinted=0; int gSortType=0; void swap(int *a,int *b) {int temp;temp=*a;*a=*b;*b=temp; } void DBG_printarray(int N) //調試用函數 {int d;for(d=0;d<N;d++){printf("%d ",A[d]);}printf("\n"); } void CheckMethod(int N) {if(gPrinted)return;int i;if (gNextTurnToPrint==1){if(gSortType==0)printf("Insertion Sort\n");elseprintf("Heap Sort\n");for(i=0;i<N;i++){printf("%d",A[i]);if(i!=N-1)printf(" ");}gNextTurnToPrint=0;gPrinted=1;return;}for (i=0;i<N;i++){if(A[i]!=B[i])return;}gNextTurnToPrint=1; }void InsertionSort(int a[],int left ,int right,int N) {int i,j,temp;for(i=left;i<right;i++){temp=a[i+1];for(j=i+1;j>left;j--){if(temp<a[j-1])a[j]=a[j-1];else break;}a[j]=temp;CheckMethod(N);} }void PrecDown(int a[],int x,int N) {int temp=a[x];int parent,child;parent=x;for(child=2*parent+1; child<= N ;child=child*2+1){if(child!=N){if(a[child+1]>a[child])child++;}if(temp<a[child]){a[parent]=a[child];parent=child;}else break;}a[parent]=temp; // DBG_printarray(N+1); }void HeapSort(int a[],int N) {//建大頂堆然后把首元素后移int i,ptrRight=N-1,temp,d;for(i=(ptrRight-1)/2;i>=0;i--){PrecDown(a,i,ptrRight);}for(i=ptrRight;i>0;i--){temp=a[i];a[i]=a[0];a[0]=temp;PrecDown(a,0,i-1);CheckMethod(N);} }int main() {int i,N;scanf("%d",&N);for(i=0;i<N;i++){scanf("%d",&A[i]);tmp[i]=A[i];}for(i=0;i<N;i++){scanf("%d",&B[i]);}InsertionSort(A,0,N-1,N);if(!gPrinted){for(i=0;i<N;i++){A[i]=tmp[i];}gSortType=1;HeapSort(A,N);}}
轉載于:https://www.cnblogs.com/gk2017/p/7141134.html
總結
以上是生活随笔為你收集整理的PTA 09-排序3 Insertion or Heap Sort (25分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一起talk C栗子吧(第一百二十三回:
- 下一篇: python_day02 上节课知识点