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

Đề tài: Khử đệ Quy Quicksort[ko xuất ra kết quả]

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

    Question Khử đệ Quy Quicksort[ko xuất ra kết quả]

    Mình chạy trên nền DevC , khi compile thì ko có lỗi rất OK,nhưng khi Run nó thì chỉ chạy đc phần nhập mảng,sau đó thì thoát lun[ko ra kết quả]
    mình nghĩ là bị thiếu hàm xuất gì đó! mình yếu về phần code nên mọi ng giúp mình cho nó chạy với.

    thân!

    #include <iostream.h>
    #include <stdlib.h>
    #include <time.h>
    #define M 100

    void Swap (int &a, int &b)
    {
    int c;
    c=a; a=b; b=c;
    }



    void Nhap(int *a,int &n){
    cout<<"nhap gia tri cua mang:";
    cin>>n;
    int i,x;
    for(i=1;i<=n;i++)
    {
    cout<<"nhap so"<<i<<" ";
    cin>>a[i];
    }
    }


    void Xuat(int *a,int n){
    if(n>0){
    Xuat(a,n-1);
    cout<<a[n]<<" ";
    }
    }


    void QuickSortKhuDeQuy(int a[100], int n)
    {
    struct Stack
    { //Dinh nghia kieu phan tu trong stack
    int q;
    int r;
    };

    Stack stack[50]; //khoi tao stack co toi da 50 phan tu
    int sp = 0;
    int i, j, x, r,q;
    stack[0].q=0; //chi so dau cua mang can sap
    stack[0].r=n-1; //chi so cuoi cua mang can sap

    do{
    //lay 1 phan hoach ra tu stack
    q=stack[sp].q;
    r=stack[sp].r;
    sp--; //xoa 1 phan tu khoi stack
    do{
    //phan hoach day con tu a[q] .. a[r]
    i=q;
    j=r;
    x=a[(q+r)/2]; //lay phan tu giua cua day can sap xep thu tu
    //lam chot
    do{
    while (a[i]<x) i++;
    //tim phan tu dau tien co tri lon hon hay bang x
    while (a[j]>x) j--;
    if (i<=j){
    Swap(a[i],a[j]);
    i++;
    j--;
    }
    }while (i<=j);
    if (i<r){ // phan tu thu 3 co tu 2 phan tu tro len
    // Dua vao Stack chi so dau va chi so
    // cuoi cua phan tu thu ba
    sp++;
    stack[sp].q=i;
    stack[sp].r=r;
    }
    r=j; // Chuan bi vi tri de phan hoach phan co gia tri
    // nho hon chot
    }while (q<r);//ket thuc khi Stack rong
    }while (sp!=-1);
    }





    int main()
    {
    int a[M];
    int n;
    Nhap(a,n);
    cout<<"\nSo phan tu truoc khi sap xep la: \n";
    Xuat(a,n);

    QuickSortKhuDeQuy(a,n);
    cout<<"\n\nSo phan tu sau khi sap xep la: \n";
    Xuat(a,n);

    }
    Đã được chỉnh sửa lần cuối bởi thieu5k8 : 18-11-2011 lúc 10:56 PM.

  2. #2
    Ngày gia nhập
    11 2010
    Bài viết
    5

    ko ai giúp hết ah?

  3. #3
    Ngày gia nhập
    11 2010
    Bài viết
    5

    Mình đã sửa đc rùi,nhưng có thêm 1 vẫn đề nữa phát sinh đó là kết quả bị lỗi!
    demo.bmp

    bạn nào phát hiện ra lỗi chỉ mình với!
    thanks các bạn!

    #include <iostream.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <time.h>
    #define M 100


    void Swap (int &a, int &b)
    {
    int c;
    c=a; a=b; b=c;
    }
    void Nhap(int *a,int &n){
    cout<<"nhap gia tri cua mang:";
    cin>>n;
    int i,x;
    for(i=1;i<=n;i++)
    {
    cout<<"nhap so"<<i<<" ";
    cin>>a[i];
    }
    }

    void Xuat(int *a,int n){
    if(n>0){
    Xuat(a,n-1);
    cout<<a[n]<<" ";
    }
    }

    void QuickSortKhuDeQuy(int a[100], int n)
    {
    struct Stack
    { //Dinh nghia kieu phan tu trong stack
    int q;
    int r;
    };

    Stack stack[50]; //khoi tao stack co toi da 50 phan tu
    int sp = 0;
    int i, j, x, r,q;
    stack[0].q=0; //chi so dau cua mang can sap
    stack[0].r=n-1; //chi so cuoi cua mang can sap

    do{
    //lay 1 phan hoach ra tu stack
    q=stack[sp].q;
    r=stack[sp].r;
    sp--; //xoa 1 phan tu khoi stack
    do{
    //phan hoach day con tu a[q] .. a[r]
    i=q;
    j=r;
    x=a[(q+r)/2]; //lay phan tu giua cua day can sap xep thu tu
    //lam chot
    do{
    while (a[i]<x) i++;
    //tim phan tu dau tien co tri lon hon hay bang x
    while (a[j]>x) j--;
    if (i<=j){
    Swap(a[i],a[j]);
    i++;
    j--;
    }
    }while (i<=j);
    if (i<r){ // phan tu thu 3 co tu 2 phan tu tro len
    // Dua vao Stack chi so dau va chi so
    // cuoi cua phan tu thu ba
    sp++;
    stack[sp].q=i;
    stack[sp].r=r;
    }
    r=j; // Chuan bi vi tri de phan hoach phan co gia tri
    // nho hon chot
    }while (q<r);//ket thuc khi Stack rong
    }while (sp!=-1);
    }

    int main()
    {
    int a[M];
    int n;
    Nhap(a,n);
    cout<<"\nSo phan tu truoc khi sap xep la: \n";
    Xuat(a,n);
    getch();
    QuickSortKhuDeQuy(a,n);
    cout<<"\n\nSo phan tu sau khi sap xep la: \n";
    Xuat(a,n);
    getch();
    }

  4. #4
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Theo mình là bạn làm bị sót viẹc xử lý phân hoạch chính
    Bởi vì kết quả cho thấy : Chương trình chỉ sort cho các phân hoạch con, còn phân hoạch chính vẫn chưa làm.
    Mà đúng theo thuật toán phải làm là làm Phân hoạch chính xong ngon đã. Rồi mới chẻ phân hoạch chính ra làm 2 phần, rồi thực hiện trên các phân hoạch con

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

  1. Quicksort sử dụng lặp????
    Gửi bởi 51203104 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 05-11-2013, 06:50 PM
  2. Lập trình C Xuất nhập file trong C kết quả xuất ra không đúng?
    Gửi bởi lamhoang100 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 05-06-2013, 05:38 PM
  3. Phần mềm quản lý sản xuất, quản lý Iso - Supersoft
    Gửi bởi lecongchi trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 20-02-2012, 02:59 PM
  4. Sửa lỗi không xuất ra danh sách sinh viên khi dùng QuickSort ?
    Gửi bởi Lindan trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 1
    Bài viết cuối: 16-11-2011, 10:39 PM
  5. Trả lời: 6
    Bài viết cuối: 04-05-2008, 08:04 AM

Tags của đề tài này

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