Cho em hỏi là tại sao trong một vài trường hợp sort() lại cho ra thời gian nhanh hơn sort_heap() ạ. Ví dụ trong code này, em chỉ sắp xếp tăng dần một vector struct gồm hai số nguyên, hàm so sánh chỉ so sánh một đại lượng trong struct thì sort_heap() cho thời gian 0.261s còn sort() cho thời gian chỉ 0.131s (với test n = 100000)
#include <bits/stdc++.h>
using namespace std;
struct data {
int u, p;
};
int cmpfunc (const data &a, const data &b)
{
return (a.u - b.u);
}
bool cmp (data x, data y){
return (x.u < y.u);
}
int main()
{
system("cls");
fstream f;
f.open("HOUGH.INP", ios::in);
int n,m;
f >> n >> m;
vector<data> a,b; int j; data pr;
for (int i = 1; i<=n; i++){
f >> j; pr.u = j; pr.p = i-1;
a.push_back(pr);
}
for (int i = 1; i<=m; i++) {
f >> j; pr.u = j; pr.p = i-1;
b.push_back(pr);
}
f.close();
sort_heap(a.begin(), a.end(), cmp);
sort_heap(b.begin(), b.end(), cmp);
return 0;
}
Còn trong code sau, sắp xếp tăng dần vector struct gồm 3 đại lượng int, hàm so sánh 2 đại lượng trong đó, thì sort() chạy quá thời gian còn sort_heap() chỉ tổn 0.220s (test n = 100000).
#include <bits/stdc++.h>
using namespace std;
struct datatype {
int u,v,c;
};
bool cmp(const datatype a, const datatype b) {
if (a.u > b.u) return false;
if (a.u < b.u) return true;
if (a.v > b.v) return false;
return true;
}
int main()
{
system("cls");
fstream f;
f.open("input.txt", ios::in);
int n;
f >> n;
vector<datatype> data(n);
for (int i = 0; i<n; i++) {
f >> data[i].u >> data[i].v >> data[i].c;
}
sort_heap(data.begin(), data.end(), cmp);
return 0;
}
Cho em hỏi là vì sao ạ? Em mới học C++ nên chưa rành lắm. Dạ tiện cho em hỏi là nên dùng hàm sort nào để đỡ tốn thời gian và an toàn nhất ạ? Em thấy có hàm qsort bên C nhưng em xây mãi không được, cứ bị vướng chỗ hàm compare ấy ạ. Cảm ơn mọi người nhiều ạ! 
P/s: Vì em đang luyện thi hsg nên thời gian chạy đối với e khá quan trọng ạ. Mong mọi người giúp đỡ e 
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?