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

Đề tài: Lập trình C | Thuật toán sắp xếp chèn thực hiện trên C

  1. #1
    Ngày gia nhập
    03 2007
    Nơi ở
    Nhà hát của những giấc mơ
    Bài viết
    33

    Mặc định Lập trình C | Thuật toán sắp xếp chèn thực hiện trên C

    Hỏi các bác tí:
    cho mảng a[n]

    Cho vòng lặp for chạy từ i=0 đến n

    Nếu số b cần chèn : a[i] < b < a[i+1] thì gán a[i+1]=b

    xong rồi làm sao gán tiếp giá trị của a[i+1] cho đến n được

    Các bác giúp em cái

  2. #2
    Ngày gia nhập
    12 2006
    Bài viết
    28

    nếu bạn muốn chèn thêm phần tử vào mảng thì phải dồn các phần tử của mảng chứ sao lại gán ;
    bạn có thể nói rỏ ý định của bạn hay không /
    bigdog

  3. #3
    No Avatar
    zangziz Khách

    Mặc định tra loi

    Bạn có thể tham khảo code sau:
    Ở đây mình cho n=9 và gán cho mảng giá trị từ 1-->9, sau đó chèn vào.

    C Code:
    1. int i,j,n,b;
    2. int a[100];
    3. clrscr();
    4. n=9;
    5. for(i=0;i<n;i++)
    6.     a[i]=i+1;
    7. for(i=0;i<n;i++)
    8.     printf("%4d",a[i]);
    9.  
    10. printf("nhap vao vi tri can chen\n");
    11. scanf("%d",&i);
    12. printf("nhap vao so can chen");
    13. scanf("%d",&b);
    14.    
    15. n++; //Tăng n lên 1 do mảng có thêm 1 phần tử
    16.  
    17. for(j=n-1;j>i;j--)
    18.     a[j]=a[j-1];   // gán các giá trị từ a[i] đến a[-1];
    19. a[i]=b;
    20.  
    21. for(i=0;i<n;i++)
    22.     printf("%4d",a[i]);
    Đã được chỉnh sửa lần cuối bởi Kevin Hoang : 09-04-2009 lúc 09:29 PM. Lý do: Sory quên gõ dấu

  4. #4
    No Avatar
    Nhuan_Trang_Only_Love Khách

    Trích dẫn Nguyên bản được gửi bởi manutd1988 Xem bài viết
    Hỏi các bác tí:
    cho mảng a[n]

    Cho vòng lặp for chạy từ i=0 đến n

    Nếu số b cần chèn : a[i] < b < a[i+1] thì gán a[i+1]=b

    xong rồi làm sao gán tiếp giá trị của a[i+1] cho đến n được

    Các bác giúp em cái
    cái này có thể dùng một biến temp
    temp=A[i+1]//thỏa mãn điều kiện a[i]<b<a[i+1] thì gán luôn
    a[i+i]=b;
    rồi chạy vòng lặp ngược trở lại từ cuối đến vị trí này và gán(chèn thì phải khai báo thừa một phần tử cuối)
    k=n;
    while(k!=m)//m là vị trí mà bước trên ta nhớ lại
    {
    a[k]=a[k--];
    a[k]=temp;
    }

    Với lại bài này trong diễn đàn có nói đến rồi đó.Bạn thử search xem.

  5. #5
    Ngày gia nhập
    03 2007
    Nơi ở
    Nhà hát của những giấc mơ
    Bài viết
    33

    Cảm ơn bạn nhé

    Cái bài mình đang làm là bài sắp xếp chèn

    Bạn có thể chỉ rõ thuật toán của nó được ko

  6. #6
    No Avatar
    Nhuan_Trang_Only_Love Khách

    Mặc định Lập trình C | Thuật toán sắp xếp chèn thực hiện trên C

    Bạn có thể search trong diễn đàn đi.
    Cái này nói đến rồi đó, hình như bác huynguyen nói rõ về nó rồi đó.

  7. #7
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Ặc .. các bác làm ăn thế này hỏng hết cấu trúc của C/C++ rồi.
    Giả sử mảng có 5 phần tử khai báo tĩnh : a[5] (filled out) bây giờ muốn chèn thêm 1 phần tử nữa vào ?? -> Không thể được. Vì khai báo tĩnh hết space rồi còn đâu mà chèn. Bài này thì luôn phải dùng mảng động và tiện hơn thì stack hoặc queue đẹp hơn.
    None!

  8. #8
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Sắp xếp chèn hoàn toàn khác với chèn một phần tử và mảng chứ?

    Sau đây là giải thuật sắp xếp chèn(Insertion sort) cho một mảng các phần tử có tên là a.

    - Coi phần tử a[1] là một dãy đã có thứ tự.(Một phần tử tất nhiên là đã có thứ tự rồi.)

    - Bước 1, chèn phần tử a[2] vào danh sách đã có thứ tự a[1] sao cho a[1], a[2] là một danh sách có thứ tự.

    - Bước 2, chèn phần tử a[3] vào danh sách đã có thứ tự a[1], a[2] sao cho a[1], a[2], a[3] là một danh sách có thứ tự.

    - Tổng quát, ở bước thứ i, chèn phần tử a[i+1] vào danh sách đã có thứ tự a[1],a[2],..a[i] sao cho a[1], a[2],.. a[i+1] là một danh sách có thứ tự.

    - Phần tử đang xét a[j] sẽ được chèn vào vị trí thích hợp trong danh sách các phần tử đã được sắp trước đó a[1],a[2],..a[j-1] bằng cách so sánh a[j] với a[j-1]. Nếu a[j] nhỏ hơn a[j-1] thì hoán đổi a[j-1] và a[j] cho nhau và tiếp tục so sánh a[j-1] (lúc này a[j-1] chứa nội dung của a[j]) với a[j-2] đứng ngay trước nó...

    Đây là code của nó

    Code:
    int i,j;
    for(i=2;i<=n;i++)
    {
       j=i;
       while(j>1,a[j]<a[j-1])
       {
         swap(a[j],a[j-1]);//Hoán đổi a[j] và a[j-1]
         j=j-1;
       }
    }
    Lưu ý: Mọi người test lại nhé, Dreaminess viết hơi vội có thể là không chính xác nhưng ý tưởng của sắp xếp chèn là vậy đó.


    Chúc may mắn!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

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

    Mặc định trả lời bạn nhé

    bài này tương đối dễ với người lập trình
    chỉ cần tìm trên mạng bạn sẽ có cả rổ luôn

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

  1. Thuật toán tìm đường đi giữa hai điểm trên bản đồ
    Gửi bởi lacvuong trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 26-03-2011, 08:57 PM
  2. Lập trình C Kỹ thuật lính canh | kỹ thuật đặt cờ hiệu | trên C là gì?
    Gửi bởi shinichi1290 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 14-03-2010, 12:28 PM
  3. Thuật toán in ra tam giác trên C?
    Gửi bởi lebronjamesuit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 12-01-2010, 12:18 AM
  4. Áp dụng kỹ thuật tạo đối tượng mẫu trên C++
    Gửi bởi Quách Phẩm Siêu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 16-05-2009, 08:14 PM
  5. Kỹ thuật cài đặt thuật toán heapsort và quicksort trên C?
    Gửi bởi Taylaptrinh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 06-04-2008, 06:50 PM

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