Gilgamesh_02 2021-12-23 15:41 采纳率: 50%
浏览 25
已结题

堆排序出错,不清楚哪有问题

堆排序出现有时正确有时错误的问题,找不出问题出在哪

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10

void swap(int *a,int *b)
{
    int tmp;
    tmp=*a;
    *a=*b;
    *b=tmp;
}

void heapinsert(int arr[],int index)
{
    while(arr[index] > arr[(index - 1) / 2])
    {
        swap(&arr[index],&arr[(index - 1) / 2]);
        index = (index - 1) / 2;
    }
}

void heapify(int arr[],int index,int heapsize)
{
    int left=2 * index + 1;
    while(left < heapsize)
    {
        int largest = (left+1 < heapsize && arr[left+1] > arr[left]) ? left+1 : left;
        largest = index > largest ? index : largest;
        if(index == largest)
            break;
        swap(&arr[index],&arr[largest]);
        index = largest;
        left=2 * index + 1;
    }
}

void HeapSort(int arr[],int heapsize)
{
    int i;
    for(i=0;i<N;i++)
    {
        heapinsert(arr,i);     //使二叉树变成大根堆 
    }
/*    for(i=N-1;i>=0;i--)
    {
        heapify(arr,i,N);
    } */
    swap(&arr[0],&arr[--heapsize]);  //最大值与数组最后一个节点交换,同时缩小heapsize 
    while(heapsize>0)
    {
        heapify(arr,0,heapsize);     //O(logN)
        swap(&arr[0],&arr[--heapsize]); 
    }
 } 


int main(void)
{
    int i;
    int arr[N];
    srand(time(NULL));
    for(i=0;i<N;i++)
    {
        arr[i]=rand()%101;
    }
    for(i=0;i<N;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    HeapSort(arr,N);
    for(i=0;i<N;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
} 

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月31日
    • 创建了问题 12月23日

    悬赏问题

    • ¥15 如何让企业微信机器人实现消息汇总整合
    • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
    • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
    • ¥15 TLE9879QXA40 电机驱动
    • ¥20 对于工程问题的非线性数学模型进行线性化
    • ¥15 Mirare PLUS 进行密钥认证?(详解)
    • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
    • ¥20 想用ollama做一个自己的AI数据库
    • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
    • ¥15 请问怎么才能复现这样的图呀