Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Thuật toán heapsort ~~~~help

  1. #1
    Ngày gia nhập
    11 2013
    Bài viết
    1

    Mặc định Thuật toán heapsort ~~~~help

    Mình viết heapsort nhưng sao nó ko chạy =.= ko biết lỗi ở đâu mong mn xem giúp
    Code:
    #include <iostream>
    #include <cstdlib>
    using namespace std;
    void max_heapcify(int *,int,int);
    void buildheap(int *,int);
    void heapsort(int *,int);
    
    void max_heapcify(int *a,int i,int n)
    {
        int temp=a[i];int j=2*i;
        while(j<=n)
        {
            if(j<n&&a[j+1]>a[j])
                j=j+1;
            if(a[i]<a[j])
            {
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
    
    void buildheap(int *a,int n)
    {
        for(int i=n/2;i>=1;i--)
            max_heapcify(a,i,n);
    }
    
    void heapsort(int *a,int n)
    {
        buildheap(a,n);
        int temp=a[n];
        a[n]=a[1];
        a[1]=a[n];
        heapsort(a,n-1);
    }
    
    
    int main()
    {
        int n,*a;
        cout<<"Input n :";
        cin>>n;
        a=new int[n+1];
        srand(time(NULL));
        for(int i=1;i<n+1;i++)
        {
            a[i]=rand()%100;
        }
        cout<<"Array before sort :";
        for(int i=1;i<n+1;i++)
        {
            cout<<a[i]<<" ";
        }
        heapsort(a,n);
        cout<<endl;
        for(int i=1;i<n+1;i++)
        {
            cout<<a[i]<<" ";
        }
        return 0;
    }

  2. #2
    Ngày gia nhập
    01 2013
    Bài viết
    1,479

    Cái này là bạn ko hiểu thuật toán.
    Nói sơ sơ là như vầy:
    - Xem mảng là 1 cây nhị phân, xây heap từ tầng m-1 bằng cách swap nó với tầng dưới nếu trái với tính chất heap (*)
    - Sau khi hoàn tất, node cha luôn lớn hơn 2 node con; vậy node gốc là lớn nhất
    - Swap node gốc với phần tử cuối cùng, loại phần tử cuối cùng khỏi heap
    - Đến khi heap còn 1 node, do việc swap phá vỡ tính heap ở gốc nên phải duy trì tính heap.

    (*) 1 tree có 0 hay 1 node là (trivial) heap, nên chỉ xét từ tầng áp chót, và chỉ cần theta(log(N)) để cây heap-node-heap (LMR) là heap.
    Đã được chỉnh sửa lần cuối bởi prog10 : 27-02-2015 lúc 03:59 PM.

  3. #3
    Ngày gia nhập
    01 2015
    Bài viết
    6
    http://benhvienungbuouhungviet.com/ung-thu-thanh-quan/
    http://benhvienungbuouhungviet.com/ung-thu-thuc-quan/
    http://benhvienungbuouhungviet.com/ung-thu-tuyen-tuy/
    http://benhvienungbuouhungviet.com/ung-thu-co-tu-cung
    http://benhvienungbuouhungviet.com/ung-thu-nao
    http://benhvienungbuouhungviet.com/ung-thu-tuyen-tien-liet/

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn