#堆排序要点(一维数组和完全二叉树)记住
1.找到最后一个非叶子节点n/2-1
2.知道左右子树的节点编号arr[i]=2i+1 arr[i]=2i+2
//堆排序 #include#include using namespace std; void duip(vector &v) { if(v.size()==0)return; for(int j=v.size();j>=2;j--)//长度 { for(int i=j/2-1;i>=0;i--)//从最后一个非叶子节点开始 { if(2*i+1 v[i])//左节点 { int temp=v[2*i+1]; v[2*i+1]=v[i]; v[i]=temp; } if(2*i+2 v[i])//右节点 { int temp=v[2*i+2]; v[2*i+2]=v[i]; v[i]=temp; } } int tmp=v[0]; v[0]=v[j-1]; v[j-1]=tmp; } } void printT(vector v) { for(int i=0;i v={3,4,6,1,7,2}; printT(v); duip(v); printT(v); system("pause"); return 0; }



