堆排序
思想:
1.构建最大堆
2.把根节点和最后一个节点交换,,把堆长度-1,也就不考虑放最后的最大的元素了,再构建最大堆
3.现在第二大的元素在根节点了,我们再重复步骤2,直到堆长度为1
void MaxHeap(int a[],int fa,int n){ int i,s=a[fa]; for(i=fa<<1;i<=n;i<<=1){ if(i<n&&a[i]<a[i+1])i++; if(s>a[i])break; a[i>>1]=a[i]; } a[i>>1]=s; } void BuildHeap(int a[],int n){ for(int i=n>>1;i>=1;i--) MaxHeap(a,i,n); } void HeapSort(int a[],int n){ BuildHeap(a,n); for(int i=n;i>=2;i--){ int t=a[i]; a[i]=a[1]; a[1]=t; MaxHeap(a,1,i-1); } }
调用:
for(int i=1; i<=n; i++) //注意是从1开始 cin>>a[i]; HeapSort(a,n); for(int i=1; i<=n; i++)cout<<a[i]<<" ";
┆凉┆暖┆降┆等┆幸┆我┆我┆里┆将┆ ┆可┆有┆谦┆戮┆那┆ ┆大┆始┆ ┆然┆
┆薄┆一┆临┆你┆的┆还┆没┆ ┆来┆ ┆是┆来┆逊┆没┆些┆ ┆雁┆终┆ ┆而┆
┆ ┆暖┆ ┆如┆地┆站┆有┆ ┆也┆ ┆我┆ ┆的┆有┆精┆ ┆也┆没┆ ┆你┆
┆ ┆这┆ ┆试┆方┆在┆逃┆ ┆会┆ ┆在┆ ┆清┆来┆准┆ ┆没┆有┆ ┆没┆
┆ ┆生┆ ┆探┆ ┆最┆避┆ ┆在┆ ┆这┆ ┆晨┆ ┆的┆ ┆有┆来┆ ┆有┆
┆ ┆之┆ ┆般┆ ┆不┆ ┆ ┆这┆ ┆里┆ ┆没┆ ┆杀┆ ┆来┆ ┆ ┆来┆