堆的建立,插入和自动排序
在网上看的代码基本上都是这样的:
#include<iostream>using namespace std;void MakeHeap (int a[], int n);intmain (){ int a[100]; int n, i; cout << "Enter the number:" << endl; cin >> n; for (i = 1; i <= n; i++) { cout << "Enter the element of the Heap:" << endl; cin >> a[i]; } MakeHeap (a, n); cout << "The Heap is:" << endl; for (i = 1; i <= n; i++) { cout << a[i] << " "; } cout << endl; return 1;}voidMakeHeap (int a[], int n){ int i, j, flag; for (i = n / 2; i >= 1; i--) { j = 2 * i; if (a[j] <= a[j + 1]) j++; if (a[i] < a[j]) { flag = a[i]; a[i] = a[j]; a[j] = flag; } }}
所以我自己实现了一个简单的,没考虑算法复杂度(特别是堆的建立,堆的排序还是挺简单的)。
#include<iostream>using namespace std;int data[100];int count;void printList(int data[],int length){int i;for(i=0;i<length;i++){cout<<data[i]<<" ";}cout<<endl;}void swap(int& first,int& second ){int temp=first;first=second;second=temp;}void HeapSort(int* data,int position){if(position<=0)return;if(data[position]>data[(position-1)/2]){swap(data[position],data[(position-1)/2]);HeapSort(data,(position-1)/2);}}void insert(int* data,int value){data[count++]=value;HeapSort(data,count-1);}void BuildBigHeap(int* data,int size){bool isChange=true;while(isChange){isChange=false;int i;for(i=(size-2)/2;i>=0;i--){int j=2*i+1;if(data[j]<data[j+1])j++;if(data[i]<data[j]){swap(data[i],data[j]);isChange=true;}}}}void main(){cout<<"请输入count的值:";cin>>count;cout<<endl;int i;for(i=0;i<count;i++){cout<<"请输入第"<<i<<"个值: ";cin>>data[i];cout<<endl;}printList(data,count);BuildBigHeap(data,count);printList(data,count);insert(data,7);printList(data,count);return;}