zoukankan      html  css  js  c++  java
  • 插入排序和堆排序

    题目: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("
    ");
    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
    ");
    82         showArray(tempOri);
    83     }else{
    84         printf("Heap Sort
    ");
    85         for(int i=1;i<=n;i++){
    86             tempOri[i]=origin[i];
    87         }
    88         heapSort();
    89     }
    90     return 0;
    91 }
    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    修改 Mac 默认 PHP 运行环境,给 MAMP 配置全局 Composer
    修改 Mac 默认 PHP 运行环境,给 MAMP 配置全局 Composer
    Intellij Idea/Webstorm/Phpstorm 的高效快捷键
    Intellij Idea/Webstorm/Phpstorm 的高效快捷键
    管理工具推荐
    mongo find
    redis 工具
    Redis Quick Start [熟练版]
    Redis cluster
    redis cluster 使用中出现的问题
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/6495714.html
Copyright © 2011-2022 走看看