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

Đề tài: Chương trình sắp xếp vun đống, giúp em sửa lõi?

  1. #1
    Ngày gia nhập
    05 2009
    Bài viết
    5

    Mặc định Chương trình sắp xếp vun đống, giúp em sửa lõi?

    Em viết chương trình sắp xếp vun đống nhưng bị lỗi, sau khi heapsort cac phan tu cua mang ko sap xep theo thu tu giam dan;
    #include "conio.h"
    #include "stdio.h"
    void nhapmang(int *a,int n);
    void in(int *a, int n);
    void PushDown(int *a,int first,int last);
    void swap(int *b,int *c);
    void HeapSort(int *a,int n);
    void main()
    {
    int i,n,a[30];
    printf("\n Nhap so phan tu cua mang: ");
    scanf("%d",&n);
    printf("\n Nhap vao 1 mang: \n");
    nhapmang(a,n);
    HeapSort(a,n);
    in(a,n);
    getch();
    }
    void nhapmang(int *a,int n)
    { int i;
    for(i=1;i<=n;i++)
    {
    printf("\n Nhap phan tu thu %d : ",i);
    scanf("%d",&a[i]);
    }
    }
    void in(int *a,int n)
    {int i;
    for(i=1;i<=n;i++)
    printf("\t%d",a[i]);
    }

    void swap(int *b,int *c)
    {
    int tg;
    {
    tg=*b;
    *b=*c;
    *c=tg;
    }
    }
    void PushDown(int *a, int first,int last)
    {
    int r;
    r= first;
    while (r <= (last/2))
    if (last == 2*r) // nút r chi có con trái
    {
    if (a[r] > a[last])
    swap(&a[r],&a[last]);
    r=last;
    }
    else
    //Nút r lon hon con trai va con trai không lon hon con phai
    if (a[r]>a[2*r] && a[2*r]<= a[2*r+1])
    {
    swap(&a[r],&a[2*r]);
    r = 2*r ;// Xet tiep nut con trai
    }
    else
    //Nut r lon hon con phai va con phai khong lon hon con trai
    if (a[r]>a[2*r+1] && a[2*r+1] <= a[2*r])
    {
    swap(&a[r],&a[2*r+1]);
    r = 2*r+1 ; //Xet tiep nut con phai
    }
    else
    r = last; //Nut r da dung vi tri
    }



    void HeapSort(int *a, int n)
    {
    int i;

    for (i=n/2;i>=0;i--)
    PushDown(a,i,n);
    for(i=n;i>=0;i--)
    {
    swap(&a[1],&a[i]);
    PushDown(a,1,i-1);
    }
    }
    Đã được chỉnh sửa lần cuối bởi theln : 10-05-2009 lúc 04:20 PM.

  2. #2
    Ngày gia nhập
    02 2008
    Bài viết
    4

    ở hàm swap bạn phải chuyền tham chiếu chứ sao lại chuyền con trỏ rứa?

  3. #3
    Ngày gia nhập
    09 2008
    Nơi ở
    Thanh Pho Hồ Chi Minh
    Bài viết
    8

    đúng vậy, hàm void swap(int *b,int *c) cậu nên đổi sang tham chiếu là swap(int &b, int &c)
    Con đường IT lắm gian nan.

Các đề tài tương tự

  1. Bài tập C++ lõi }
    Gửi bởi newhoc trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 08-07-2013, 05:43 PM
  2. Trả lời: 3
    Bài viết cuối: 07-10-2011, 12:59 PM
  3. Tại sao các hệ điều hành không tận dụng được đa lõi
    Gửi bởi ThomasAnderson trong diễn đàn Thắc mắc chung
    Trả lời: 5
    Bài viết cuối: 09-04-2009, 09:00 AM

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