[PAT][Basic Level]1035

KeyWords:Insertion_sort(*array,length);Merge_sort(*array,length);

AC CODE:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
void Insertion(int * num ,int len,int *array_input);
bool array_equal(int * num,int *array_input,int len);
void Merge(int *num,int len,int *array_input);
int main()
{
    int n;
    cin>>n;
    //cout<<n<<endl;
    int * num1 , *num2;
    num1 = (int *)malloc(sizeof(int)*n);
    num2 = (int *)malloc(sizeof(int)*n);
    int *array_input;
    array_input =(int *)malloc(sizeof(int)*n);
    
    for(int i = 0 ; i < n ; i ++){
       cin>>num1[i];
       num2[i] = num1[i];
    }
     
    
    for(int i = 0 ; i < n ; i ++){
       cin>>array_input[i];
    }
    
    
    Insertion(num1,n,array_input);
    Merge(num2,n,array_input);
    /*int *p  = Insertion(num,n);
    
    for(int i = 0 ; i < n ; i ++){
        cout<<p[i]<<" ";
    }*/
    
    return 0;
}

void Insertion(int * num ,int len,int *array_input)
{
    int temp;
    bool flag_array_equal = false;
    for(int i = 0+ 1 ; i < len ; i ++){
        int j = i;
            while(num[j] < num[j-1]){
                
                /*swap(num , j-1 , j);*/
                temp = num[j-1];
                num[j-1] = num[j];
                num[j] =temp;
                j--;
            }
            if(flag_array_equal){
                    cout<<"Insertion Sort"<<endl;
                    for(int i = 0 ; i < len ; i ++){
                        
                        if(i < len-1){
                           cout<<num[i]<<" "; 
                        }
                        else{
                            cout<<num[i];
                        }
                    
                    }
                    return;
                
                }
                flag_array_equal = array_equal(num,array_input,len);
        }
      
       
    
    return;
}
void Merge(int *num,int len,int *array_input)
{
  
    bool flag_array_equal = false;
    for(int step = 2 ; step <= len ;step *=2){
        
        
        
            int start;
            for(start = 0 ; start+step < len ; start += step){
           sort(num+start,num+start+step); //按照固定的步长对数组进行排序
         
        
             }
        sort(num+start,num+len);// sort 最后剩下的几个位置
        
        if(flag_array_equal){
             cout<<"Merge Sort"<<endl;
                    for(int i = 0 ; i < len ; i ++){
                        
                        if(i < len-1){
                           cout<<num[i]<<" "; 
                        }
                        else{
                            cout<<num[i];
                        }
                    
            }
        }
        //test
        
        /*for(int i = 0 ; i < len ; i ++){
            cout<<num[i]<<" ";
        }*/
        
        flag_array_equal = array_equal(num,array_input,len);
        
        
        
    
    
    }
}
bool array_equal(int * num,int *array_input,int len)
{
    for(int i = 0 ; i < len ; i ++){
        if(num[i] !=array_input[i]){
            return false;
        }
    }
    return true;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值