堆排序

堆排序算法详解
 1 #include<iostream>
 2 using namespace std;
 3 
 4 
 5 void Max_Heapify(int a[],int heap_size, int i)//修复堆
 6 {
 7     int largest;
 8     int l = 2 * i;
 9     int r = 2 * i + 1;
10     if (l <= heap_size&&a[l] > a[i])
11         largest = l;
12     else largest = i;
13     if (r <= heap_size&&a[r] > a[largest])
14         largest = r;
15     if (largest != i)
16     {
17         int t = a[i];
18         a[i] = a[largest];
19         a[largest] = t;
20         Max_Heapify(a, heap_size, largest);
21     }
22 }
23 
24 
25 void Build_Max_Heap(int a[], int size, int i)//产生最大堆
26 {
27     int l = 2 * i;
28     int r = 2 * i + 1;
29     if (l <= size)
30         Build_Max_Heap(a, size, l);
31     if (r <= size)
32         Build_Max_Heap(a, size, r);
33     Max_Heapify(a, size, i);
34 }
35 
36 
37 void Heapsort(int a[], int size)//最终算法实现
38 {
39     Build_Max_Heap(a, size, 1);
40     int Heap_size = size;
41     while (Heap_size > 1)
42     {
43         int t = a[1];
44         a[1] = a[Heap_size];
45         a[Heap_size] = t;
46         Heap_size--;
47         Max_Heapify(a, Heap_size, 1);
48     }
49 }
50 
51 
52 void main()
53 {
54     int a[11];
55     for (int i = 1; i < 11; i++)
56         a[i] = 11 - i;
57     Heapsort(a, 10);
58     for (int i = 1; i < 11; i++)
59         cout << a[i] << endl;
60 
61 }

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/zhengzhe/p/6479112.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值