人生列车

follow on!success!

导航

插入排序和堆排序

题目:https://www.patest.cn/contests/pat-a-practise/1098

1098. Insertion or Heap Sort (25)

照着学习了一遍精神的代码

 1 #include <cstdio>
 2 #include <algorithm>
 3 
 4 using namespace std;
 5 #define MAXN 111
 6 int origin[MAXN],tempOri[MAXN],changed[MAXN];
 7 int n;
 8 bool isSame(int *A,int *B){
 9     for(int i=0;i<=n;i++)
10         if(A[i]!=B[i])
11             return false;
12     return true;
13 }
14 
15 bool showArray(int *A){
16     for(int i=1;i<=n;i++){
17         printf("%d",A[i]);
18         if(i<n)printf(" ");
19     }
20     printf("\n");
21 }
22 
23 bool insertSort(){
24     bool flag=0;
25     for(int i=2;i<=n;i++){
26         if(i!=2&&isSame(tempOri,changed)){
27             flag=true;
28         }
29         sort(tempOri,tempOri+i+1);
30         if(flag)
31             return true;
32     }
33     return false;
34 }
35 
36 void downAdjust(int low,int high){
37     int i=low,j=i*2;
38     while(j<=high){
39         if(j+1<=high&&tempOri[j+1]>tempOri[j]){
40             j++;
41         }
42         if(tempOri[j]>tempOri[i]){
43             swap(tempOri[j],tempOri[i]);
44             i=j;
45             j=i*2;
46         }else{
47             break;
48         }
49     }
50 }
51 
52 void heapSort(){
53     bool flag=false;
54     for(int i=n/2;i>=1;i--){
55         downAdjust(i,n);
56     }
57     for(int i=n;i>1;i--){
58         if(i!=n&&isSame(tempOri,changed)){
59             flag=true;
60         }
61         swap(tempOri[i],tempOri[1]);
62         downAdjust(1,i-1);
63         if(flag){
64             showArray(tempOri);
65             return;
66         }
67     }
68 }
69 
70 int main()
71 {
72     scanf("%d",&n);
73     for(int i=1;i<=n;i++){
74         scanf("%d",&origin[i]);
75         tempOri[i]=origin[i];
76     }
77     for(int i=1;i<=n;i++){
78         scanf("%d",&changed[i]);
79     }
80     if(insertSort()){
81         printf("Insertion Sort\n");
82         showArray(tempOri);
83     }else{
84         printf("Heap Sort\n");
85         for(int i=1;i<=n;i++){
86             tempOri[i]=origin[i];
87         }
88         heapSort();
89     }
90     return 0;
91 }

 

posted on 2017-03-03 11:40  tianxia2s  阅读(291)  评论(0编辑  收藏  举报