堆排序

Posted 菜鸟根据地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。

 

 

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void HeapAdjust(int Array[],int s ,int m);
 5 void HeapSort(int Array[],int Length)
 6 {
 7     for(int i = Length/2 ;i>0;i--)
 8     {
 9         HeapAdjust(Array,i,Length);
10     }
11 
12     for(int j =Length ;j>1 ;j-- )
13     {
14         int temp;
15         temp = Array[j];
16         Array[j] = Array[1];
17         Array[1] = temp;
18         HeapAdjust(Array,1,j-1);
19     }
20 }
21 void HeapAdjust(int Array[],int s ,int m)
22 {
23     int temp = Array[s];
24     for(int i = 2*s  ; i <= m ; i = i*2)
25     {
26         if(Array[i]<Array[i+1] && i<m) //这里面的i<m 保证了i+1不越界
27         {
28             ++i;
29         }
30         if(temp >= Array[i])
31             break;
32         Array[s] = Array[i];
33         s = i;
34     }
35     Array[s] = temp;//简便在这次交换
36 }
37 
38 int main()
39 {
40 
41     int a[6] = {0,4,3,6,2,1};
42     for(int i =0 ;i<5; i++)
43     {
44         printf("%d ",a[i]);
45     }
46     printf("/n ");
47     HeapSort(a,5);
48     for(int i =0 ;i<5; i++)
49     {
50         printf("%d ",a[i]);
51     }
52     system("pause");
53 }

方法是没问题,但是上面的主函数写错了,因为上面写的是从下标为1开始的,数组的时候,要小心是不是有零

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

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

排序--08---堆排序

python代码实现堆排序

算法-java代码实现堆排序

一文带你了解堆排序

堆排序