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

Đề tài: bài tập sắp xếp số chẵn tăng dần số lẻ giảm dần trong mảng 1 chiều

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

    Mặc định bài tập sắp xếp số chẵn tăng dần số lẻ giảm dần trong mảng 1 chiều

    số chẵn tăng ở đầu mảng. lẻ giảm dần ở cuối mảng, còn số 0 thì ở giữa mảng
    em có 1 ý tưởng là tách số lẻ ra mảng A, số chẵn ra B , sắp xếp từng mảng rùi ghép lại với nhau . nhưng thấy dài dòng quá.. em có suy nghĩ đc đoạn code sau nhưng thấy ko ổn và ko chạy đc. bác nào có cao kiến thì chỉ giáo. (em mới chỉ học đến for, while if else break thui ạ). ngoài ra vấn đề số 0 ở giữa mảng em vẫn ko nghĩ ra nổi.
    C Code:
    1. void sx(int a[],int n)
    2. {
    3.     for(int i=0;i<n-1;i++)
    4.     {
    5.         for(int j=i+1;j<n;j++)
    6.         {
    7.          while(a[i]%2==0 & a[j]%2==0)
    8.             {
    9.  
    10.                if(a[i]>a[j])
    11.                {
    12.                    int t=a[i];
    13.                    a[i]=a[j];
    14.                    a[j]=t;
    15.                }
    16.              }
    17.          while(a[i]%2!=0 & a[j]%2!=0)
    18.          {
    19.              if(a[i]<a[j])
    20.              {
    21.              int t=a[i];
    22.              a[i]=a[j];
    23.              a[j]=t;
    24.              }
    25.          }
    26.       }
    27.     }
    28. }
    Đã được chỉnh sửa lần cuối bởi ronoa : 06-01-2012 lúc 09:51 PM.

  2. #2
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    bn chỉ cần sắp chẵn tăng dần ở đầu, lẻ giảm dần ở cuối là tự nhiên 0 nằm ở giữa thôi.
    còn đây là code chẵn tăng cho pn tham khảo thử
    Code:
    while(1)
    	{
    		pos = count ;
    		while(a[pos]%2 && pos<n)
    		{
    			pos++ ;
    		}
    		if(pos>=n)
    			break ;
    		int min = pos ;
    		for(int i=pos+1;i<n;i++)
    		{
    			if(a[i]%2==0)
    				if(a[i]<a[min])
    					 min = i ;
    		}
                    swap(a[min],a[count]) ;
    		count++;
    	}
    cái kia thì tương tự
    HT117-5277

  3. #3
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    số chẵn tăng ở đầu mảng. lẻ giảm dần ở cuối mảng, còn số 0 thì ở giữa mảng
    (-------> ở đây 0 ko cho đi theo số chẵn đc)

    Nếu như bạn định làm 2 mảng. Thì cho số 0 đi theo mảng lẻ rồi sắp xếp + ghép ----> sẽ ok
    Nếu không tách làm 2 mảng thì chỉ việc dồn số xong rồi sắp xếp thì tự nhiên 0 sẽ ở giữa
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  4. #4
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    Trích dẫn Nguyên bản được gửi bởi beautifulsoul84hung Xem bài viết
    số chẵn tăng ở đầu mảng. lẻ giảm dần ở cuối mảng, còn số 0 thì ở giữa mảng
    (-------> ở đây 0 ko cho đi theo số chẵn đc)

    Nếu như bạn định làm 2 mảng. Thì cho số 0 đi theo mảng lẻ rồi sắp xếp + ghép ----> sẽ ok
    Nếu không tách làm 2 mảng thì chỉ việc dồn số xong rồi sắp xếp thì tự nhiên 0 sẽ ở giữa
    một thiếu sót to lớn hehe tks anh beautiful
    HT117-5277

  5. #5
    Ngày gia nhập
    05 2011
    Bài viết
    16

    Để cho đơn giản, xét tất cả các cặp nghịch thế rồi hoán vị nó là OK, bài này phát huy được sức mạnh của con trỏ hàm:
    Code (mới xét sơ sơ có thể thừa TH)
    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. void Swap(int &a, int &b)
    5. {
    6.     int temp = a;
    7.     a = b;
    8.     b = temp;
    9. }
    10. bool Compare(int a, int b)
    11. {
    12.     if(a%2==0 && b%2 == 0 && a > b)
    13.         return true;
    14.     if(a%2!=0 && b%2 != 0 && a < b)
    15.         return true;
    16.     if(a%2 != 0 && b%2 == 0)
    17.         return true;
    18.     if(a == 0 && b %2 == 0 && a < b)
    19.         return true;
    20.     return false;
    21. }
    22.  
    23. void Sort(int a[], int n, bool (*Compare) (int, int))
    24. {
    25.     for(int i=0; i<n-1; i++)
    26.         for(int j=i+1; j<n; j++)
    27.             if(Compare(a[i], a[j]))
    28.                 Swap(a[i], a[j]);
    29. }
    30.  
    31. int main()
    32. {
    33.     int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    34.     int n = sizeof(a)/sizeof(a[0]);
    35.     Sort(a, n, Compare);
    36.     for(int i=0; i<n; i++)
    37.         cout << a[i] << " ";
    38.  
    39. }

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

  1. Sắp xếp mảng 1 chiều tăng hoặc giảm dần
    Gửi bởi dinhvanvo 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-11-2012, 08:03 PM
  2. Bài tập C bài tập c sắp xếp số dương tăng dần và số âm giảm dần trong mảng 1 chiều
    Gửi bởi killervip0 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 05-01-2012, 09:21 AM
  3. Kỹ thuật C Nhập mảng nguyên sao cho chẵn tăng, lẻ giảm
    Gửi bởi lytieu_long550 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 19-08-2011, 07:19 PM
  4. Bài tập C Sắp xếp chẵn lẻ xen kẽ tăng dần
    Gửi bởi Pop trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 14-08-2011, 05:32 PM
  5. sắp xếp mảng số nguyên chẵn tăng dần, lẻ tăng dần, không dùng mảng tạm
    Gửi bởi hailoc12 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 09-08-2006, 11:44 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