01/10/2018, 11:58
Thuật toán heap sort
Mọi người có thể cho em xin mã nguồn thuật toán heapsort được không ạ ? Và cho em hỏi là số phần tử tối đa heapsort có thể chạy là bao nhiêu ? Em đã tham khảo trên mạng nhưng với 10000 phần tử trở lên thì thuật toán không chạy và bị đứng.
Em cảm ơn mọi người
hàm heapsort của em tham khảo :
void Array::CreateHeap()
{
int offset, heapSize;
heapSize = length - 1;
for (offset = (length / 2); offset >= 0; offset--)
{
Heapify( offset, heapSize);
}
}
void Array::Heapify(int _offset, int _heapSize)
{
int leftNode, rightNode, largest, temp;
leftNode = 2 * _offset;
rightNode = 2 * _offset + 1;
if (leftNode <= _heapSize && value[leftNode] > value[_offset])
{
largest = leftNode;
}
else
{
largest = _offset;
}
if (value[rightNode] > value[largest] && rightNode <= _heapSize)
{
largest = rightNode;
}
if (largest != _offset)
{
temp = value[_offset];
value[_offset] = value[largest];
value[largest] = temp;
Heapify( largest, _heapSize);
}
}
void Array::HeapSort()
{
clock_t start = clock();
CreateHeap();
int heapSize, offset, temp;
heapSize = length - 1;
for (offset = heapSize; offset >= 0; offset--)
{
temp = value[0];
value[0] = value[heapSize];
value[heapSize] = temp;
heapSize--;
Heapify( 0, heapSize);
}
clock_t end = clock();
this->time = double(end - start)*1.0 / CLOCKS_PER_SEC;
}
Bài liên quan
Lưu ý hàm heapify có cấp O(nlogn) (viết chuẩn là O(n)) nên bạn cần xem lại, vì thật sự hiệu chỉnh khi đã heapify xong rất ít O(logn).
Em phải hiểu nó hoạt động như nào trước đã
Heapsort sử dụng cấu trúc dữ liệu heap
Cấu trúc dự liệu heap là gì?
Heapsort sử dụng heap như thế nào?
Chỗ left, right child có lỗi.
Left child = offset*2+1;
Right child= left child + 1;
Code bị lặp vô hạn khi bạn heapify offset = 0, largest = leftNode = 0
Dạ mấy anh thông cảm ạ vì bài tập này thầy chỉ cho tìm hiểu chứ không dạy, trong khi có tới 6 thuật toán sắp xếp em không tìm hiểu hết được, chỉ lên mạng copy y xì chứ tìm hiểu không kịp
vậy mình phải sửa thế nào vậy anh ?
Nếu môn này mà là CTDL & GT thì vái cả nón luôn ấy :v
Cứ vẽ heap nhị phân rồi đánh chỉ số là thấy ngay.
cho em xin code được không ?
HeapSort - GeeksforGeeks
Heap sort is a comparison based sorting technique based on Binary Heap data structure. It is similar to selection sort where we first find the… Read More »