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

Đề tài: Thuật toán sắp xếp, xin giúp đỡ

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

    Mặc định Thuật toán sắp xếp, xin giúp đỡ

    em có đoạn chương trình sắp xếp như sau :
    C Code:
    1. //----------------------sap xep  --------------------
    2. #include <conio.h>
    3. #include <stdio.h>
    4.  void   main()
    5. {
    6. //clrscr();
    7. int i,j,vitri=0,mang[10];
    8. int tam,min;
    9.     for(i=0;i<10;i++)
    10.      scanf("\n%d",&mang[i]);
    11.    for(i=0;i<10;i++)
    12.      {
    13.     min=mang[i];
    14.     for(j=i+1;j<10;j++)
    15.        if(mang[j]<=min)
    16.        {
    17.        min=mang[j];
    18.        vitri=j;
    19.        }
    20.        tam=min;
    21.        mang[vitri]=mang[i];
    22.        mang[i]=tam;
    23.       }
    24.  
    25.       for(i=0;i<10;i++)
    26.       printf("\n%d",mang[i]);
    27.  
    28.    getch();
    29. }
    khi nhập 9 8 7 6 5 4 3 2 1 0 kết quả nó như thế này : 0 1 2 3 4 9 6 7 8 9 ,nhập các số khác cũng lỗi tương tự ,đệ tìm hoài vẫn ko có cách khắc phục ,các huynh đệ giúp nhé ! thank

  2. #2
    Ngày gia nhập
    05 2007
    Nơi ở
    HCMC
    Bài viết
    60

    Sửa dòng :
    Code:
    for(i=0;i<10;i++)
    lại thành
    Code:
    for(i=0;i<10-1;i++)

  3. #3
    Ngày gia nhập
    05 2007
    Bài viết
    6

    Trích dẫn Nguyên bản được gửi bởi sonhn Xem bài viết
    Sửa dòng :
    Code:
    for(i=0;i<10;i++)
    lại thành
    Code:
    for(i=0;i<10-1;i++)
    nó có thay đổi nhưng vẫn không đúng : lần này nó cho kết quả như sau 0 1 2 3 4 8 6 7 8 9
    cái này đệ lấy trong sách" cấu trúc dữ liệu và giải thuật "nhưng không hiểu sao lại thế này nhỉ?

  4. #4
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Thử sửa như sau xem nhé:
    Code:
    for(i=0;i<9;i++)
         {
    	min=i;
    	for(j=i+1;j<10;j++)
    	   if(mang[j]<mang[min])
    	         min=j;
    	   tam=mang[min];
    	   mang[min]=mang[i];
    	   mang[i]=tam;
          }

  5. #5
    Ngày gia nhập
    04 2007
    Bài viết
    128

    Code:
    for( i=0;i<9;i++)
    	{
    		min=i;
    		for( j=i+1;j<10;j++)
    			if(a[j]<a[min])
    				min=j;
    			tam=a[i];
    			a[i]=a[min];
    			a[min]=tam;
    	
    	}
    Đã được chỉnh sửa lần cuối bởi soda_chanhmuoi : 30-05-2007 lúc 01:36 PM.

  6. #6
    Ngày gia nhập
    05 2007
    Bài viết
    6

    Mặc định Thuật toán sắp xếp, xin giúp đỡ

    hic cám ơn các bác ,đệ sửa được rồi ,ta phải gán vitri=i;
    Code:
       for(i=0;i<10;i++)
         {
    	min=mang[i]; vitri=i;
    	for(j=i+1;j<10;j++)
    	   if(mang[j]<=min)
    	   {
    	   min=mang[j];
    	   vitri=j;
    	   }
    	   tam=min;
    	   mang[vitri]=mang[i];
    	   mang[i]=tam;
          }
    bài này hay ở chỗ vitri ,nó làm bài toán giải quyết nhanh hơn nó chỉ chay n*n vòng thôi ,(không biết đúng không nữa)
    Đã được chỉnh sửa lần cuối bởi forever7040 : 30-05-2007 lúc 05:25 PM.

  7. #7
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    218

    * Cái này là sắp xếp chọn thì phải: nguyên lý của nó là chia quá trình sắp xếp n phần tử thành n-1 lần tìm giá trị lớn nhất ( hoặc nhỏ nhất ) sau đó đảo giá trị đó cho phần tử đầu tiên của đoạn tìm lớn nhất nhỏ nhất đó. Trong đoạn code trên vitri chính là biến lưu giữ địa chỉ của phần tử đầu tiên của đoạn tìm kiếm lớn nhất đó.

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

  1. Giải thuật shaker sort. Giúp mình giải thuật với?
    Gửi bởi nguyenhai trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 29-01-2015, 10:53 PM
  2. Bài tập C Cần giải giúp 3 câu trong đề thi kĩ thuật lập trình C và Cấu trúc dữ liệu và giải thuật
    Gửi bởi nguyenthi0602 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 24-09-2012, 08:42 PM
  3. thuật toán cộng hai số lớn. các bạn giúp mình
    Gửi bởi ngonchanloi89 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 02-04-2011, 10:35 AM
  4. lưu đồ giải thuật bài mã đi tuần thuật toán quay lui vét cạn. Giúp mình với?
    Gửi bởi katemat000 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: 05-01-2010, 10:53 PM
  5. thuật toán in ra tất cả các tổng có thể. Giúp mình với?
    Gửi bởi xiu_coi trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 10-10-2009, 08:59 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