堆排序出錯,不清楚哪有問題

CSDN問答 2021-12-30 13:53:44 阅读数:898

堆排序 排序 不清楚 不清 清楚

堆排序出現有時正確有時錯誤的問題,找不出問題出在哪

#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://primo.wiki/2021/12/202112231542022924.html