码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序实验

时间:2020-11-19 12:29:13      阅读:8      评论:0      收藏:0      [点我收藏+]

标签:rgb   内容   堆排   nbsp   amp   min   void   pre   main   

实验内容

【问题描述】对一含有n个整数的数组,使用堆排序将其由小到大排序。
【输入形式】第一行为元素个数n,第二行为n个整数(以空格隔开)。
【输出形式】输出n个整数(以空格隔开)
【样例输入】
  6 
  43 2 56 1 22 9
【样例输出】
  1 2 9 22 43 56

#include <stdio.h>
#include <stdlib.h>


int Min(int a,int b,int c){
    if (a<=b)
    {
        if (a<=c)
        {
            return 0;
        }
        else
        {
            return 2;
        }
        
        
    }
    else
    {
        if (b<=c)
        {
            return 1;
        }
        else
        {
            return 2;
        }
        
        
    }
    
    

}


int Min1(int a,int b){
    if (a<=b)
    {
        return 0;
    }
    else
    {
        return 1;
    }
    
    
}

void  heapsort2(int *arr,int length){
    int sta=length/2;
    int temp1;
    int temp2;
    int temp3;
    int temp4;
    int temp5;
    int i;
    for (i = sta; i >0; i--)
    {
        temp5=i;
        while(temp5<=sta)
        {
            temp1=2*temp5;
            temp2=2*temp5+1;
            if (temp2<=length)
            {
                temp3=Min(arr[temp5],arr[temp1],arr[temp2]);
                if(temp3==0){
                    break;
                }
                if (temp3==1)
                {
                    temp4=arr[temp5];
                    arr[temp5]=arr[temp1];
                    arr[temp1]=temp4;
                    temp5=temp1;
                }
                if (temp3==2)
                {
                    temp4=arr[temp5];
                    arr[temp5]=arr[temp2];
                    arr[temp2]=temp4;
                    temp5=temp2;
                }
                
                
            }
            else
            {
                temp3=Min1(arr[temp5],arr[temp1]);
                if (temp3==1)
                {
                    temp4=arr[temp5];
                    arr[temp5]=arr[temp1];
                    arr[temp1]=temp4;
                    temp5=temp1;
                }
                else{
                    break;
                }
            }
        }
              
    }
  
}









int main(){
    int num=0;
    int i;
    int num1;
    scanf("%d",&num);
    int *arr=(int *) malloc(sizeof(int)*(num+1));
    arr[0]=0;
    for (i = 1; i <= num; i++)
    {
        scanf("%d", &arr[i]);
    }
    num1=num;
    for (i = 1; i <= num; i++)
    {
        heapsort2(arr,num1);
        arr[0]=arr[num1];
        arr[num1]=arr[1];
        arr[1]=arr[0];
        printf("%d",arr[num1]);
        if (num1!=1)
        {
           printf(" ");
        }
        num1=num1-1;
        
    }
    return 0;
}

 

好了,我们下回见,peace

堆排序实验

标签:rgb   内容   堆排   nbsp   amp   min   void   pre   main   

原文地址:https://www.cnblogs.com/gitpy123/p/13972417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!