您的位置:首页 > 其它

堆排序

2015-12-04 16:21 218 查看
依旧是作业,这几天写了好多次堆排序了 ,随便放一个上来

#include <iostream>
#include <functional>
#include <ctime>
using namespace std;

template <class T, class Compare = std::less<T> >
void sink(T* arr, int pos, int last) {
int son;
while (pos * 2 <= last) {
son = pos * 2;
if (son != last && Compare()(arr[son], arr[son + 1])) ++son;
if (Compare()(arr[son], arr[pos])) break;
std::swap(arr[son], arr[pos]);
pos = son;
}
}

template <class T, class Compare = std::less<T> >
void heapSort(T* arr, int size) {
int last = size - 1;
for (int i = last / 2; i >= 1; --i)
sink<T, Compare>(arr, i, last);
while (last > 1) {
std::swap(arr[1], arr[last--]);
sink<T, Compare>(arr, 1, last);
}
}

int main()
{
const int sz = 13;
int arr[sz];
srand((unsigned)time(NULL));
cout << "数组是随机产生的" << endl;
for (int i = 1; i < sz; ++i) {
arr[i] = rand() % 100;
}

cout << "排序1:" << endl;
heapSort(arr, sz);
for (int i = 1; i != sz; ++i)
cout << arr[i] << " ";
cout << endl;

cout << "排序2:" << endl;
heapSort<int, std::greater<int> >(arr, sz);
for (int i = 1; i != sz; ++i)
cout << arr[i] << " ";
cout << endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: