堆排序

 

 

 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开始的,数组的时候,要小心是不是有零

posted @ 2018-02-28 22:46  小陈同学啦  阅读(138)  评论(0编辑  收藏  举报