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

CSDN问答 2021-12-30 13:51:15 阅读数:638

堆排序 排序 出错 不清楚 不清

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

#include<stdio.h>#include<stdlib.h>#include<time.h>#define N 10void 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

版权声明:本文为[CSDN问答]所创,转载请带上原文链接,感谢。 https://ask.csdn.net/questions/7613165