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

Đề tài: Sắp xếp dãy theo thứ tự lớn nhỏ xen kẽ

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

    Smile Sắp xếp dãy theo thứ tự lớn nhỏ xen kẽ

    Yêu cầu bài toán đặt ra là : Nhập vào một dãy số, sắp xếp dãy số đó sao cho : số đầu tiên là số lớn nhất, sau đó đến số nhỏ nhất, sau đấy lại đến số lớn thứ 2, số nhỏ thứ 2,.....
    Ai có code hoặc giải thuật thì giúp em với...Thanks all

  2. #2
    Ngày gia nhập
    07 2011
    Bài viết
    11

    Trích dẫn Nguyên bản được gửi bởi rikabui Xem bài viết
    Yêu cầu bài toán đặt ra là : Nhập vào một dãy số, sắp xếp dãy số đó sao cho : số đầu tiên là số lớn nhất, sau đó đến số nhỏ nhất, sau đấy lại đến số lớn thứ 2, số nhỏ thứ 2,.....
    Ai có code hoặc giải thuật thì giúp em với...Thanks all
    mình có cái ý tưởng hơi cùi thế này
    -đầu tiên sử dụng các thuật toán sắp xếp để sắp xếp mảng theo thứ tự giảm dần.
    -sử dụng 2 biến i và j và i=0,j=n-1;
    -in ra các cùng lúc(hoặc cất vào một mảng khác) các giá trị mảng[i],mảng[j] ( với đk i chạy từ 0 -> n/2, j chạy từ n về n/2)
    -kiểm tra đk nếu tổng (i+j)%2==0 thì in ra giá trị ở giữa mảng đó

    vd code (=-=! bad code)

    C++ Code:
    1.  
    2. #include <iostream>
    3.  
    4. void swap(int &a,int &b)
    5. {
    6.     int temp=a;
    7.     a=b;
    8.     b=temp;
    9. }
    10.  
    11. void sapxep(int a[],int n)
    12. {       int min;
    13.     for(int i=0;i<n-1;i++)
    14.     {
    15.     min=i;
    16.     for(int j=i+1;j<n;j++)
    17.     if(a[min]<a[j])
    18.     min=j;
    19.     swap(a[min],a[i]);
    20. }
    21. }
    22.    
    23.  
    24.  
    25. int main()
    26. { int n,dem1=-2,dem2=-1;
    27.   int a[100],b[100];
    28.   cout<<"\n so luong phan tu :";
    29.   cin>>n;
    30.  
    31.   for(int i=0;i<n;i++)
    32.   cin>>a[i];
    33.  
    34.   sapxep(a,n);    // sắp xếp giảm dần
    35.  
    36.   int i=0,j=n-1;
    37.   while(i<n/2 || j>n/2)
    38.   {
    39.   b[dem1=dem1+2]=a[i];   // b[0]=a[0]
    40.   b[dem2=dem2+2]=a[j];   // b[1]=a[j]
    41.   i++;
    42.   j--;
    43.   }
    44.   if((i+j)%2==0)  
    45.   {
    46.     b[i+j]=a[(i+j)/2];
    47.   }
    48.   for(int i=0;i<n;i++)
    49.   cout<<b[i]<<" ";
    50.   return 0;
    51.  
    52. }

  3. #3
    Ngày gia nhập
    08 2011
    Nơi ở
    Trà Vinh
    Bài viết
    20

    Trích dẫn Nguyên bản được gửi bởi rikabui Xem bài viết
    Yêu cầu bài toán đặt ra là : Nhập vào một dãy số, sắp xếp dãy số đó sao cho : số đầu tiên là số lớn nhất, sau đó đến số nhỏ nhất, sau đấy lại đến số lớn thứ 2, số nhỏ thứ 2,.....
    Ai có code hoặc giải thuật thì giúp em với...Thanks all
    Ý tưởng:
    - sắp xếp mảng giảm dần;
    //Bạn sắp xếp đi nhé!!!
    - Xuất mảng : xuất phần tử đầu mảng sau đó là phần tử cuối mảng;
    C Code:
    1. for (i=0; i<n/2; i++)
    2.    {
    3.          printf("%3d",a[i]);
    4.          printf("%3d",a[n-i-1];
    5.    }
    6. if (n%2==1)//nếu số phần tử của mảng là số lẻ thì vẫn còn phần tử ở giữa chưa in ra nên bây giờ phải in nó ra
    7.     printf("%3d",a[i]);
    Nó là con của thằng nào ? Con của thằng nào ? Nói mau!!!!!!!!!!!!!!!

  4. #4
    Ngày gia nhập
    05 2010
    Bài viết
    7

    Cám ơn mọi người giúp đỡ, em làm được rồi

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

    Mình có 3 ý tưởng sau :
    1) Tạm gọi là nam châm vậy
    Dùng đệ quy . Nếu ko thích thì dùng vòng lặp để khử đệ quy vẫn ok
    Input: Mảng n phần tử
    Output: Mang đã dc xắp theo yêu cầu xen kẽ
    Method:
    Trường hợp suy biến: Nếu Input có n=1 phần tử thì hút phần tử đó vào Output . Nếu n=0 thì ko làm gì nữa.
    Trường hợp đệ quy:
    Đầu tiên thì Hút vào Output phần tử Max của Input, sau đó hút min của Input vào Output
    Gọi đệ quy với n-2 phần tử còn lại của Input
    --------------------
    2) Merge
    Xắp xếp mảng tăng dần hoặc giảm dần.
    Bẻ đôi mảng thành 2 mảng con, quay ngược 1 mảng con rồi merge xen kẽ 2 mảng con đó thì dc kết quả.
    --------------------
    3) Đệ quy 100%.
    Input: Mảng Input, n phần tử
    Output: Mảng đã xắp xếp xen kẽ
    Method:
    Tạo 1 cái flag (flag này dùng để dịch duyển đến vị trí đã dc xắp xếp chính xác)
    flag=0;
    C++ Code:
    1. If (flag=n-1)
    2.    return;
    3. If (input[flag] >= max của input n-1 phần tử còn lại // tức từ flag -> n-1)
    4. {  
    5.     flag++;
    6.     If (input[flag] >= min của input n-2 phần tử còn lại// từ từ flag -> n-1)
    7.        swap input[flag] cho input[min];
    8.     flag++;
    9.     Gọi đệ quy từ vị trí flag ;
    10. }
    11. Else
    12. {
    13.     swap input[flag] cho input[max];
    14.     flag++;
    15.     Gọi đệ quy từ vị trí flag;
    16. }
    Đã được chỉnh sửa lần cuối bởi clchicken : 16-10-2011 lúc 09:33 PM.

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

  1. Tối ưu hóa cho bài kiểm tra mảng có âm duơng xen kẽ không
    Gửi bởi danielh 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: 08-12-2016, 09:37 PM
  2. Xen kẽ ngày tháng của dữ liệu SQL Server hoặc MySQL
    Gửi bởi xskzace trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 0
    Bài viết cuối: 20-05-2013, 04:06 PM
  3. Bài tập C trộn 2 mảng thành 1 mảng có phần tử xen kẽ với nhau
    Gửi bởi killervip0 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: 06-01-2012, 10:42 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. Trộn hai mảng chẵn lẽ xen kẽ với nhau
    Gửi bởi prince7seas trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 21-07-2010, 11:56 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