堆排序

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 }

 

以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章

选择排序(简单选择排序堆排序的算法思想及代码实现)

排序--08---堆排序

python代码实现堆排序

算法-java代码实现堆排序

一文带你了解堆排序

堆排序