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

Đề tài: xem giúp phần sắp xếp...

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

    Mặc định xem giúp phần sắp xếp...

    bài toán này tui làm với mảng chọn thì chạy, nhưng không hiểu sao khi áp dụng phần nổi bọt thì nó không xuất ra màn hình, Mong mọi người xem giúp
    Code:
    #include<conio.h>
    #include<iostream.h>
    #include<stdio.h>
    #include<string.h>
    typedef struct{char sv[30];int d_hoa;int d_toan; int d_ly ;float DTB;}
    sinhvien;
    /*void nhapmang(int m[], int &n)
    {
    	for (int i=0;i<n;i++)
       {
    
    			//cout<<"nhap phan tu thu "<<i+1<<": ";
    			cin>>m[i];
    	 }
    } */
    sinhvien *nhap_sinh_vien(sinhvien a[100],int &n)
    {
    	printf("nhap so sinh vien trong danh sach: ");scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    		{printf("\nnhap sinh vien %d: ",i);
    		printf("\nnhap ten sinh vien: ");fflush(stdin);gets(a[i].sv);
    		do {	printf("nhap diem Toan: ");
    				scanf("%d",&a[i].d_toan);
    		   } while(a[i].d_toan>10||a[i].d_toan<0);
    		do {	printf("nhap diem Hoa: ");
    				scanf("%d",&a[i].d_hoa);
    
    		   } while(a[i].d_hoa>10||a[i].d_hoa<0);
    		do {printf("nhap diem Ly: ");
    				scanf("%d",&a[i].d_ly);
    		   } while(a[i].d_ly>10||a[i].d_ly<0);
    		a[i].DTB= (1.0*(a[i].d_toan+a[i].d_hoa+a[i].d_ly)/3);
    	}
    	return a;
    }
    void xuat(sinhvien a[],int n)
    	{  int stt;
    	if(n==0)
    	  return;
    	else     {clrscr();
    		  printf("  =================================================================\n");
    		  printf("||STT |       HO VA TEN       |  TOAN   |  HOA |  LY  |    TBC     ||");
    		  printf("\n||=================================================================");
    	 {for(int i=1;i<=n;i++)
    		   printf("\n||%2d  |%20s   |   %2d    |  %2d  |  %2d  |  %2f  ||",i,a[i].sv,a[i].d_toan,a[i].d_hoa,a[i].d_ly,a[i].DTB);
    		 }
    	}
    	}
    void hoanvi(sinhvien &a,sinhvien &b)
    {  sinhvien t;
    	t=a;a=b;b=t;
    }
    
    /*void chon(sinhvien m[],int &n)
    {
      for (int i=1;i<=n-1;i++)
        for (int j=i+1;j<=n;j++)
    		if(m[i].DTB>m[j].DTB)
          hoanvi(m[i],m[j]);
    } */
    
    void noibot(sinhvien m[], int &n)
    {  int i, j, x;
       for(i=0; i<n; i++)
         for(j=n-1; j>=i; j--)
    	 if(m[j-1].DTB>m[j].DTB)
    	      hoanvi(m[j-1],m[j]);
    }
    
    void main()
    {
    clrscr();
    sinhvien a[100];int n;
    nhap_sinh_vien(a,n);
    //chon(a,n);
    noibot(a,n);
    xuat(a,n);
    getch();
    //return 0;
    
    }

  2. #2
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    bubleSort tư tưởng chủ yếu của nó là thằng nào nhẹ cân sẽ nổi lên trên . Tức là với chỉ số i nào đó xét tất cả các thằng sau i trong mảng j=i+1 đến cuối mảng nếu có một phần tử thứ j nào đó nhẹ hơn i cho nó nổi lên .
    C++ Code:
    1.    if(m[j-1].DTB>m[j].DTB) // chỗ này sai nè phải so sánh m[j].DTB với m[i].DTB chứ
    Hix viết xong mới thấy cái hàm chon() của bạn . Cái hàm chon() của bạn viết chính là thuật toán nổi bọt đó . Còn hàm noibot() không biết bạn định viết thuật toán gì nếu là nổi bọt thì sai như trên mình đã chỉ ra . Mình nghĩ ý bạn là định viết hai thuật toán sắp xếp là nổi bọt và sắp xếp kiểu lựa chọn thì phải . Nếu vậy thì hàm chon() của bạn chính là thuật toán sắp xếp kiểu nổi bọt (hình như bạn bị nhầm lẫn giữa hai thuật toán) . Thuật toán sắp xếp kiểu lựa chon hay selectionSort thì khác cơ ý chính của nó là bước 1 đem thằng nhỏ nhất cho lên đầu tiên , bước 2 đem thằng nhỏ thứ hai đặt tại vị trí thứ hai .....-->sau n-1 bước mảng sẽ được sắp xếp .
    C++ Code:
    1. void selectionSort(sinhvien m[],int &n) {
    2.      int i,j,imin;
    3.      for (i=1;i<=n-1;++i) {
    4.            imin=i;
    5.            for (j=i+1;j<=n;++j)
    6.               if (m[j].DTB<m[imin]) imin=j;
    7.            /* imin chính là chỉ số phần tử nhỏ nhất */
    8.            hoanvi(m[i],m[imin]);/* cho phần tử nhỏ nhất lên đầu */
    9.      }
    10. }
    I'm superman

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

  1. Trả lời: 0
    Bài viết cuối: 16-03-2012, 07:05 PM
  2. cách ghi phần tử vào mảng lập trình c#.giúp em với
    Gửi bởi hoangkien trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 01-04-2011, 09:41 PM
  3. kiểm tra phần cứng máy tính, giúp mình?
    Gửi bởi huutrieu2005 trong diễn đàn Thắc mắc chung
    Trả lời: 6
    Bài viết cuối: 25-03-2009, 01:53 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