堆排序--还有递归法没有写
#include <iostream> using namespace std; void HeapAdjust(int arr[],int s,int m)//大顶堆,m表示最后一个数字位置,s表示第一个位置,都是下标 { int cur=s; int index; int tmp=arr[cur]; while(cur*2+1<=m) { index=cur*2+1;//left child if(index<m&&arr[index]<arr[index+1]) { index++;//right child } if(arr[cur]<arr[index]) { arr[cur]=arr[index]; arr[index]=tmp; cur=index; } else { break; } } } void HeapSort(int arr[],int size)//表示数组中元素的个数 { int arrSize=size;//(arrSize-1-1)/2表示最后一个父节点 for(int i=(arrSize-1-1)/2;i>=0;i--) { HeapAdjust(arr,i,arrSize-1); } swap(arr[0],arr[size-1]); for(int i=arrSize-1-1;i>0;i--) { HeapAdjust(arr,0,i); swap(arr[0],arr[i]); } } int main() { int arr[]={3,6,4,8,1,4,3,5,23,4324,5435,6546,76573,453,546,765,8768,987,654}; HeapSort(arr,19); for(int i=0;i<19;i++) cout<<arr[i]<<" "; getchar(); return 0; }