HeapSort,use maximun heap...
来源:互联网 发布:康乾盛世 知乎 编辑:程序博客网 时间:2024/06/06 10:04
- #include<iostream>
- #include<ctime>
- using namespace std;
- const int DefaultSize = 100;
- class MaxHeap
- {
- public:
- MaxHeap(int sz);
- int Parent(int i) { return i/2;}
- int Left(int i) { return 2*i;}
- int Right(int i) {return 2*i+1;}
- void MaxHeapify(int* arr,int i);
- void BuildMaxHeap(int* arr,int arrSize);
- void HeapSort(int* arr,int arrSize);
- private:
-
- int currentSize;
- void Swap(int &i,int &j) {int t=i; i=j; j=t;}
- };
- MaxHeap::MaxHeap(int arrSize)
- {
- currentSize = arrSize;
- }
- void MaxHeap::MaxHeapify(int *arr,int i)
- {
- int l = Left(i), r = Right(i),largest;
- if (l<=currentSize && arr[l]>arr[i]) largest = l;
- else largest = i;
- if (r<=currentSize && arr[r]>arr[largest]) largest = r;
- if (largest != i)
- {
- Swap(arr[i],arr[largest]);
- MaxHeapify(arr,largest);
- }
- }
- void MaxHeap::BuildMaxHeap(int* arr,int arrSize)
- {
- for (int i=arrSize/2;i>=0;i--)
- MaxHeapify(arr,i);
- }
- void MaxHeap::HeapSort(int* arr,int arrSize)
- {
- BuildMaxHeap(arr,arrSize);
-
- for (int i=arrSize;i>0;i--)
- {
- Swap(arr[0],arr[i]);
- currentSize--;
- MaxHeapify(arr,0);
- }
- }
- int main(void)
- {
- srand(unsigned(time(NULL)));
- int Size = DefaultSize;
- int *array = new int[Size];
- for(int i=0;i<Size;i++)
- array[i] = rand()%1000;
- cout<<"before sort"<<endl;
- for(int i=0;i<Size;i++)
- {
- cout<<array[i]<<" ";
- if((i+1)%10 == 0)cout<<endl;
- }
- MaxHeap maxHeap(Size-1);
- maxHeap.HeapSort(array,Size-1);
- cout<<endl<<"After sort"<<endl;
- for(int i=0;i<Size;i++)
- {
- cout<<array[i]<<" ";
- if((i+1)%10 == 0)cout<<endl;
- }
- delete [] array;
- return 0;
- }