56 lines
1.5 KiB
C++
56 lines
1.5 KiB
C++
#include <iostream>
|
|
#include <RedBlackTree.h>
|
|
#include <HeapSort.h>
|
|
#include <random>
|
|
#include <chrono>
|
|
#include <iomanip>
|
|
|
|
class RedBlackTree : public ling::RedBlackTree<int> {
|
|
protected:
|
|
[[nodiscard]] ling::Relation equal(const int &val1, const int &val2) const override {
|
|
if (val1 == val2)
|
|
return ling::Relation::EQUAL;
|
|
if (val1 < val2)
|
|
return ling::Relation::SMALL;
|
|
return ling::Relation::BIG;
|
|
}
|
|
};
|
|
|
|
#define DATA_SIZE 10000000
|
|
|
|
//开始一个统计点
|
|
#define StartStating(name) auto name = std::chrono::high_resolution_clock::now()
|
|
|
|
//结束统计
|
|
#define EndStating(name, text) do {auto __ling_end_time = std::chrono::high_resolution_clock::now(); \
|
|
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(__ling_end_time - name); \
|
|
std::cout << text << ": " << std::fixed << std::setprecision(6) <<((double)duration.count() / 1000000) << " 秒(" << duration.count() <<" 微秒)" << std::endl;\
|
|
}while(false)
|
|
|
|
int main() {
|
|
std::random_device rd;
|
|
std::mt19937 gen(rd());
|
|
|
|
std::vector<int> list;
|
|
list.reserve(DATA_SIZE);
|
|
std::uniform_int_distribution<> dis(1, DATA_SIZE * 10);
|
|
for (int i = 0; i < DATA_SIZE; i++) {
|
|
|
|
list.push_back(dis(gen));
|
|
}
|
|
StartStating(start);
|
|
ling::HeapSortDefault sort(list);
|
|
sort.init();
|
|
sort.sort();
|
|
EndStating(start, "排序耗时");
|
|
|
|
for (int i = 1; i < list.size(); i++) {
|
|
if (list[i] < list[i - 1]) {
|
|
std::cout << "错误!" << std::endl;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|