堆的时间复杂度是建O(n),时间复杂度为堆排序O(NLogN),细节如以下的算法看到:
#include <iostream> using namespace std; void swap(int &i,int &j) { int temp=i; i=j; j=temp; } void shiftDown(int *A, int start,int len) { int temp=A[start]; int i=start; int j=2*i+1; while (j<len) { if (j+1<len && A[j+1]>A[j]) { j++; } if(A[start]>A[j]) { break; }else { A[i]=A[j]; i=j; j=2*j+1; } } A[i]=temp; } void createHeap(int *A,int len) { for(int i=(len-2)/2;i>=0;i--) { shiftDown(A, i,len); } } void heapSort(int *A,int len) { createHeap(A,len); for (int i=0; i<len; i++) { swap(A[0],A[len-i-1]); shiftDown(A,0,len-i-1); } } int main(int argc, const char * argv[]) { //int A[]={100,11,43,65}; //int A[]={56,3,5,68,100,32}; int A[]={68,100,32}; heapSort(A,sizeof(A)/sizeof(int)); for(int i=0;i<sizeof(A)/sizeof(int);i++) { cout<<A[i]<<" "; } cout <<endl; return 0; }
版权声明:本文博主原创文章。博客,未经同意不得转载。
时间: 2024-10-09 17:08:54