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 关于#java#的问题,请各位专家解答!
    • ¥15 急matlab编程仿真二阶震荡系统
    • ¥20 TEC-9的数据通路实验
    • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
    • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
    • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
    • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
    • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
    • ¥30 求解达问题(有红包)
    • ¥15 请解包一个pak文件