Erreur de tri du tas, je ne sais pas ce qui ne va pas

Questions et réponses du rseoc 2021-12-30 13:52:44 阅读数:131

erreur tri du tas je

Problèmes de tri du tas parfois corrects parfois incorrects,Il n'y a pas de problème.

#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); // Faire de l'arbre binaire un grand tas de racines  }/* for(i=N-1;i>=0;i--) { heapify(arr,i,N); } */ swap(&arr[0],&arr[--heapsize]); // La valeur maximale est échangée avec le dernier noeud du tableau ,Tout en rétrécissantheapsize  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

版权声明:本文为[Questions et réponses du rseoc]所创,转载请带上原文链接,感谢。 https://primo.wiki/2021/12/202112231542022924.html