首页 > 编程语言 > 详细

数据结构01- 09-排序3 Insertion or Heap Sort

时间:2020-04-13 20:48:02      阅读:60      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

#include<stdio.h>
#define MAXN 102
int A[MAXN],a[MAXN],p[MAXN],n;
void read();
void init(int a[]);
int test(int a[],int b[]);
int insertion_sort(int a[]);
void heap_sort(int a[]);
void print(int a[]);
int main(){
    read();
    init(a);
    if(insertion_sort(a)==0) {init(a);heap_sort(a);}
     scanf("%d",&n);
    return 0;
}
void read(){
    scanf("%d",&n);
    for(int i=0;i<n;i++)scanf("%d",&A[i]);
    for(int i=0;i<n;i++)scanf("%d",&p[i]);
}
void init(int a[]){
    for(int i=0;i<n;i++) a[i] = A[i];
}
int test(int a[],int b[]){
    for(int i=0;i<n;i++)
        if(a[i]!=b[i]) return 0;
    return 1;
}
int insertion_sort(int a[]){
    int value,i,j,flag=0;
    for(i=1;i<n;i++){
        value = a[i];
        for( j=i;a[j-1]>value&&j>0;j--)
            a[j] = a[j-1];
        a[j] = value;
        if(flag==1) {printf("Insertion Sort\n");print(a);return 1;}
        flag = test(a,p);
    }
    return 0;
}
void print(int a[]){
    for(int i=0;i<n;i++){
        printf("%d",a[i]);
        if(i!=n-1) printf(" ");
    }
    printf("\n");
}

void heap_sort(int a[]){
    int j,value,flag=0,f;
    //justify heap
    for(int i=(n-3)/2+1;i>=0;i--){
        f = i;
        j = i*2+1;
        while(j<n){
            if((j+1)<n)
                if(a[j]<a[j+1]) j++;
            if(a[f]<a[j]){value = a[f]; a[f]=a[j];a[j] = value;f = j;j = f*2+1;}
            else break;
        }    
    }
    
    //sort
    for(int count=n-1;count>=0;count--){
        value = a[0];
        a[0] = a[count];
        a[count] = value;
        //justify
        f = 0;
        j = f*2+1;
        while(j<count){
            if((j+1)<count)
                if(a[j]<a[j+1]) j++;
            
            if(a[j]>a[f]) {
                value = a[f];
                a[f] = a[j];
                a[j] = value;
                f = j;
                j = f*2+1;
            }
            else break;
        }
        //output
        if(flag==1){
            printf("Heap Sort\n");
            print(a);
            return;
        }
        flag = test(a,p);
    }
}

 

数据结构01- 09-排序3 Insertion or Heap Sort

原文:https://www.cnblogs.com/Learn-Excel/p/12693372.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!