堆排序的C++实现
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { void HeapSort(int* pp,int l); void DisplayHeap(int* pp,int l); int len; cout<<"Please input the array length:"<<endl; cin>>len; int* p=new int[len+1];//heap array cout<<"Please input the element datas:"<<endl; int d; p[0]=0;//used for temp element for(int i=1;i<=len;i++) { cin>>d; p[i]=d;//initate the heap } DisplayHeap(p,len); HeapSort(p,len);//sort begin DisplayHeap(p,len); cout<<"Please input a new num:"<<endl; int nd; cin>>nd; int* pp=new int[len+2]; pp[len+1]=nd; for(int i=0;i<=len;i++) { pp[i]=p[i]; } DisplayHeap(pp,len+1); HeapSort(pp,len+1);//sort begin DisplayHeap(pp,len+1); system("pause"); return 0; } //sort function void HeapSort(int* p,int len) { int j; for(int i=len;i>1;i--) { if(p[i/2]<p[i]){ p[0]=p[i]; p[i]=p[i/2]; p[i/2]=p[0]; } } p[0]=p[1]; p[1]=p[len]; p[len]=p[0]; len--; if(len>2){ HeapSort(p,len);//1~(n-1) heap sort } } //output void DisplayHeap(int* p,int len) { cout<<"Now the heap is:"<<endl; for(int i=1;i<=len;i++) { cout<<p[i]; if(i<len) { cout<<"--"; } } cout<<"\n"; }
道之所在,虽千万人吾往矣