Hỏi đáp Sắp xếp nhanh trong danh sách đặt???

Thảo luận trong 'Lập trình máy tính' bắt đầu bởi conloc171, 10 Tháng mười một 2011.

  1. Offline

    conloc171

    • Thành Viên Mới

    Số bài viết:
    29
    Đã được thích:
    2
    Điểm thành tích:
    0
    Bên dưới là code của em nhưng không biết sai chổ nào mà chạy thì có thông báo lỗi như thế này:[IMG]
    , rồi ko ra kết quả gì cả và tắt luôn cửa sổ turbo C
    Ai biết sai chổ nào sửa giúp em, thêm vào code để nó hiển thị rõ các bước như dưới thì càng tốt. Cám ơn mọi người trước(học cấu trúc này mệt đầu quá đi) :
    Lược 1 hoán vị "a" với "a": in ra dãy số vừa hoán vị
    đoạn 1: ............
    đoạn 2: ..........

    Lược 2 hoán vị "a" với "a": in ra dãy số vừa hoán vị
    đoạn 1: ............
    đoạn 2: ..........
    #include<conio.h>
    #include<stdio.h>
    int ds[50],i,n;
    void taods()
    {
    for(i=1;i<=n;i++)
    {
    printf("phan tu thu a[%d]:",i);
    scanf("%d",&ds);
    }
    }
    void xuatds()
    {
    for(i=1;i<=n;i++)
    printf("%5d",ds);
    }
    void swap(int *c,int *d)
    {int a;
    a=*c;
    *c=*d;
    *d=a;
    return;
    }

    void Quick_Sort(int ds[], int left, int right)
    { if(left<right)
    {int i=left;int j=right;int x=ds[(left+right)/2];
    do { while(ds<x) i++;
    while(ds[j]>x) j--;
    if(i<=j){swap(&ds,&ds[j]);i++;j--;}
    }while(i<=j);
    Quick_Sort(ds,left,j);
    Quick_Sort(ds,i,right);
    }
    }

    main ()
    {
    int left,right;
    clrscr();
    printf("n=");
    scanf("%d",&n);
    taods();
    printf("\ndanh sach vua tao:\n");
    xuatds();
    printf("\ndanh sach da sap xep:\n");
    Quick_Sort(ds,left,right);
    xuatds();
    getch();
    return 0;
    }
  2. Offline

    lyvinhr00m

    • cụ lý

    Số bài viết:
    1.234
    Đã được thích:
    930
    Điểm thành tích:
    900
    Cái hàm main có truyền left, right là truyền cái j thế? @@

    Sửa lại thế này nhé!
    Mã:
    main ()
    {
    
    printf("n=");
    scanf("%d",&n);
    taods();
    printf("\ndanh sach vua tao:\n");
    xuatds();
    printf("\ndanh sach da sap xep:\n");
    Quick_Sort(ds,0,n);
    xuatds();
    getch();
    return 0;
    }
  3. Offline

    integer

    • Tiếu Ngạo Giang Hồ

    • :-?
    Số bài viết:
    1.695
    Đã được thích:
    1.313
    Điểm thành tích:
    900
    Nhấn Ctrl+C --> click vào thông báo lỗi để coppy, paste lên google để tìm thông tin về lỗi.
  4. Offline

    conloc171

    • Thành Viên Mới

    Số bài viết:
    29
    Đã được thích:
    2
    Điểm thành tích:
    0
    gõ cái lỗi đó lên google cung toàn kiếm được mấy cái gì gì ko, chả liên quan gì hết. Ai có bài về sắp xếp nhanh hoàn chỉnh cho em luôn đi
  5. Offline

    integer

    • Tiếu Ngạo Giang Hồ

    • :-?
    Số bài viết:
    1.695
    Đã được thích:
    1.313
    Điểm thành tích:
    900
    Bạn xin code hay xin thuật toán, quan trọng là mình phải hiểu, code thì đầy ra.
    Mã:
    #include <stdio.h>
    #include <conio.h>
    #define max 20
    int hoanvi(int &a,int &b)
    {
        int tmp;
        tmp=a;
        a=b;
        b=tmp;
    }
    void sxchon(int k[],int n)
    {
        for(int i=0; i<=n; i++)
        {
            int m=i;
            for(int j=i+1; j<n; j++)
                if(k[j]>k[m])
                    m=j;
            if(m!=i)
                hoanvi(k[i],k[m]);
        }
    }
    void sxchen(int k[],int n)
    {
        for(int i=1; i<n; i++)
        {
            int x=k[i];
            int j=i-1;
            while(x>k[j])
            {
                k[j+1]=k[j];
                j--;
            };
            k[j+1]=x;
        }
    }
    
    
    void sxnoibot(int k[max],int n)
    {
        for(int i=0; i<n; i++)
            for(int j=n-1; j>=i+1; j--)
                if(k[j]>k[j-1])
                    hoanvi(k[j],k[j-1]);
    
    }
    void sxnhanh(int k[], int left,int right)
    {
    
        if(left<right)
        {
            int i,j,x;
            i=left;
            j=right;
            x=k[(left+right)/2];
            do
            {
                while(k[i]>x)
                    i++;
                while(k[j]<x)
                    j--;
                if(i<=j)
                {
                    hoanvi(k[i],k[j]);
                    i++;
                    j--;
                }
            }
            while(i<=j);
            sxnhanh(k,left,j);
            sxnhanh(k,i,right);
    
        }
    }
    void chends(int k[max], int &n)
    {
        int x,vt;
        printf("\nNhap so can chen: ");
        scanf("%d",&x);
        printf("\nNhap vi tri can chen: ");
        scanf("%d",&vt);
        --vt;
    
        if((vt<=n)&&(vt>=0))
        {
            for(int i=n; i>=vt; i--)
                k[i+1]=k[i];
            n++;
            k[vt]=x;
        }
        else
            printf("\nVi tri khong hop le !\a\n");
    
    }
    void xoa(int k[max],int &n)
    {
        int x;
        printf("\nNhap vi tri can xoa");
        scanf("%d",&x);
        if(x<1||x>n)
            printf("\n\aVi tri khong hop le !");
        else
        {
            --x;//gia tri thuc te
            for(int i=x; i<n; i++)
                k[i]=k[i+1];
            n--;
        }
    }
    void nhapds(int k[max],int &n)
    {
        printf("\nNhap so phan tu nho hon %d: ",max);
        scanf("%d",&n);
        for(int i=0; i<n; i++)
        {
            printf("\nNhap %d: ",i+1);
            scanf("%d",&k[i]);
        }
    }
    void inds(int k[max],int n)
    {
        for(int i=0; i<n; i++)
            printf("%d ",k[i]);
        printf("\n");
    }
    main()
    {
        int n,i,j,m[max];
        //menu
        char c;
    menu:
        {
            printf("----------------------------Menu---------------------\n|\n");
            printf("|Nhan q de thoat chuong trinh\n|Nhan r de hien lai Menu\n|\n");
            printf("|1.Nhap danh sach\n");
            printf("|2.In danh sach\n");
            printf("|3.Sap xep chen\n");
            printf("|4.Sap xep chon\n");
            printf("|5.Sap xep noi bot\n");
            printf("|6.Sap xep vun dong\n");
            printf("|7.Sap xep nhanh\n");
            printf("|8.Xoa phan tu\n");
            printf("|9.Chen phan tu\n|\n");
            printf("----------------------------Menu---------------------\n");
        }
    
        while(c!='q')
        {
            c=getch();
            switch(c)
            {
            case '1':
                nhapds(m,n);
                break;
            case '2':
                inds(m,n);
                break;
            case '3':
                sxchen(m,n);
                break;
            case '4':
                sxchon(m,n);
                break;
            case '5':
                sxnoibot(m,n);
                break;
            case '7':
                sxnhanh(m,0,n-1);
                break;
    
            case '8':
                xoa(m,n);
                break;
            case '9':
                chends(m,n);
                break;
            case 'r':
                goto menu;
                break;
            case 'q':
                printf("\nKet thuc chuong trinh !\n\n");
                break;
    
            }
        }
    }
    
    
    conloc171 thích bài này.
  6. Offline

    conloc171

    • Thành Viên Mới

    Số bài viết:
    29
    Đã được thích:
    2
    Điểm thành tích:
    0
    Cám ơn nha. Thuật toán thì mình nắm, mà viết code cứ chạy ko được báo lỗi hoài, chắt do mình ít thực hành

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí