堆排序
Posted iwpml-595
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。
堆排序的关键就是筛选,代码如下:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<string> 5 #include<cstdio> 6 using namespace std; 7 8 void sift(int arr[],int low,int high) 9 { 10 int i=low,j=2*i; 11 int tmp=arr[i]; 12 while(j<=high) 13 { 14 if(j<high&&arr[j]<arr[j+1]) 15 j++; 16 if(tmp<arr[j]) 17 { 18 arr[i]=arr[j]; 19 i=j; 20 j=2*i; 21 } 22 else 23 break; 24 } 25 arr[i]=tmp; 26 } 27 28 void Heapsort(int arr[],int n) 29 { 30 for(int i=n/2;i>=1;i--) //建立初始堆 31 sift(arr,i,n); 32 for(int i=n;i>=2;i--) //进行n-1趟完成堆排序,每一趟堆中元素个数减一 33 { 34 swap(arr[1],arr[i]); 35 sift(arr,1,i-1); 36 } 37 } 38 39 int main() 40 { 41 int n; 42 int arr[1000]; 43 cin>>n; 44 for(int i=1;i<=n;i++) 45 cin>>arr[i]; 46 Heapsort(arr,n); 47 for(int i=1;i<=n;i++) 48 cout<<arr[i]<<" "; 49 return 0; 50 }
以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章