Heap Sort



Thuật toán Heap Sort
1.      Ý tưởng:
Việc sắp xếp lại các phần tử của một mảng ban đầu sao cho nó trở thành đống được gọi là vun đống
Sắp xếp vun đống (heapsort) là một trong các phương pháp sắp xếp chọn. Ở mỗi bước của sắp xếp chọn ta chọn phần tử lớn nhất (hoặc nhỏ nhất) đặt vào cuối (hoặc đầu) danh sách, sau đó tiếp tục với phần còn lại của danh sách. Thông thường sắp xếp chọn chạy trong thời gian O(n2). Nhưng heapsort đã giảm độ phức tạp này bằng cách sử dụng một cấu trúc dữ liệu đặc biệt được gọi là đống (heap). Đống là cây nhị phân mà trọng số ở mỗi đỉnh cha lớn hơn hoặc bằng trọng số các đỉnh con của nó. Một khi danh sách dữ liệu đã được vun thành đống, gốc của nó là phần tử lớn nhất, thuật toán sẽ giải phóng nó khỏi đống để đặt vào cuối danh sách.
2.      Thuật toán:
Algorithm heapsort(A, n)
            Input:
                        A: mảng có n phần tử
            Output:
                        Mảng A đã được sắp xếp
            m ß 0
            for k ß 1 to n do
                        insert(A, m, A[k])
            for k ß n downto 1 do
                        A[k] = remove(A, m)

3.      mã nguồn bằng C:
#include<stdio.h>   
#include<conio.h>
      Void  heap()
{
Int r,q,x;
q=n/2+1;
r=n-1;
while(r>0)
{
X=a[0];
A[0]=a[n];
A[n]=x;
r--;
while (q>=0)
{
            Sift(q,r);
q--;
}
q=0;
r=n-1;
sift(q,r);
}
}

Void sift (int q,int r);
{
      Int I,j,x;
I=q;
J=2*i+1;
X=a[i];
While (j<=r)
{
if (i<r)
if(a[i]<a[j+1])
J++;
If(x>a[j]
Break;
A[i]=a[j];
I=j;
J=2*j+1;
}
A[i]=x;
}

Không có nhận xét nào:

Đăng nhận xét