heap sort
#include <iostream>
#include <vector>
using namespace std;
//最小堆
void adjust(vector<int> &data, int i, int size) {
int left = i*2+1;
if(left>=size) return;
int right = i*2+2;
if(right<size) {
int minValue = min(data[left], data[right]);
if(data[i] > minValue) {
if(data[left]>data[right]) {
swap(data[i], data[right]);
i = right;
} else {
swap(data[i], data[left]);
i = left;
}
adjust(data, i, size);
}
}else {
if(data[i] > data[left]) {
swap(data[i], data[left]);
}
}
}
void make_heap(vector<int> &data, int size) {
for(int i=(size-1)/2; i>=0; i--) {
adjust(data, i, size);
}
}
void heap_sort(vector<int> &data, int size) {
for(int i=size-1; i>=0; i--) {
swap(data[0], data[i]);
make_heap(data, i-1);
}
}
void print(vector<int> data) {
for(int i=0; i<data.size(); i++) {
cout<<data[i]<<"\t";
}
cout<<endl;
}
int main() {
vector<int> data(10,0);
for(int i=0; i<10; i++) {
data[i] = rand()%100;
}
print(data);
make_heap(data, 10);
print(data);
heap_sort(data, 10);
print(data);
return 0;
}

浙公网安备 33010602011771号