-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathheapsort.cpp
More file actions
69 lines (64 loc) · 1.09 KB
/
Copy pathheapsort.cpp
File metadata and controls
69 lines (64 loc) · 1.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <bits/stdc++.h>
using namespace std;
#define RAND 223
#define N 1000000
#define MAXVAL 1000000
#define INF 1000000
int arr[N];
int i,Size;
void siftDown(int idx)
{
int lVal,rVal;
int l=2*idx+1;
int r=2*idx+2;
if(l<Size)
lVal=arr[l];
else
lVal=-INF;
if(r<Size)
rVal=arr[r];
else
rVal=-INF;
if(arr[idx]!=max(arr[idx],max(lVal,rVal)))
{
if(lVal>rVal)
{
swap(arr[l],arr[idx]);
siftDown(l);
}
else
{
swap(arr[r],arr[idx]);
siftDown(r);
}
}
else
return;
}
void buildHeap()
{
for(i=N/2-1;i>=0;i--)
siftDown(i);
}
int main()
{
srand(RAND);
for(i=0;i<N;i++)
{
arr[i]=rand()%MAXVAL;
//cout << arr[i] << " ";
}
Size=N;
buildHeap();
cout << endl;
//for(i=0;i<N;i++)
// cout << arr[i] << " ";
for(Size=N;Size>0;Size--)
{
siftDown(0);
swap(arr[0],arr[Size-1]);
}
cout << endl;
//for(i=0;i<N;i++)
// cout << arr[i] << " ";
}