Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 27 kết quả

Đề tài: [HELP]Sắp xếp ma trận tăng dần

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

    Mặc định [HELP]Sắp xếp ma trận tăng dần

    Mình muốn sắp xếp các phần tử trong 1 ma trận sao cho chúng tăng dần từ trái qua phải , từ trên xuống dưới . Bạn nào có thể gợi ý hướng đi giùm mình được ko ? Cám ơn nhiều

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

    theo mình bài này có thể giải theo 1 cách trực quan là bạn cứ việc dàn ma trận của bạn thành một mảng duy nhất , sau đó xếp nó theo thứ tự tăng dần ,rổi từ đó cứ việc gán từng giá trị của mảng vừa sắp xếp vào ma trận của bạn, thế là xong!
    Ngoài ra bạn cũng có thể dùng vòng lặp for đi xét từng giá trị của mảng với các phần tử còn lại của nó.
    bigdog

  3. #3
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Tùy theo yêu cầu của bài nhưng nếu sắp xếp dàn hàng ngang thì chỉ thỏa mãn ở một khía cạch nào đó cách giải thì không khó như U phải nói rõ một ma trận đó sẽ có kiểu như thế nào ? Nếu đựoc thì lôi ra một ví dụ ok ?

  4. #4
    No Avatar
    Duy Thanh Khách

    Mặc định Trả lời xếp mảng tăng

    đây là đoạn mã thưc hiện.
    #include<stdio.h>
    #include<conio.h>
    void main()
    {
    int A[20][20],b,c,i,j,k,l,min,flag,m,n;
    printf("nhap so phan tu cua ma tran \nn = ");
    scanf("%d",&n);
    printf("\nm = ");
    scanf("%d",&m);
    for(i=0;i<n;i++)
    for(j=0;j<m;j++)
    {
    printf("A[%d][%d] = ",i,j);
    scanf("%d",&A[i][j]);
    }
    for(i=0;i<n;i++)
    for(j=0;j<m;j++)
    {
    min=A[i][j];
    flag=0;
    for(k=i;k<n;k++)
    for(l=0;l<m;l++)
    if((k!=i||l>j)&&min>A[k][l])
    {
    min=A[k][l];
    b=k;
    c=l;
    flag=1;
    }
    if(flag)
    {
    A[b][c]=A[i][j];
    A[i][j]=min;
    }
    }
    //xuat mang tran
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    printf("%5d",A[i][j]);
    printf("\n");
    }
    getch();
    }
    Đã được chỉnh sửa lần cuối bởi Duy Thanh : 19-04-2007 lúc 06:57 PM.

  5. #5
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Có thể ví dụ cho kid biết đâu là một ma trận mà grub đã nói không ?

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

    Mặc định [HELP]Sắp xếp ma trận tăng dần

    Bài này cũng đơn giản thôi, ban đầu bạn cứ cho nhập ma trận đi nhá, sau đó tạo 1 con trỏ và cấp phát bộ nhớ cho con trỏ đúng với kích thước của ma trận:
    PHP Code:
    int *p;
    pcalloc(sizeof(a),m*n);  // a: mảng 2 chiều của bạn
    p=a// cho p trỏ tới a 
    Hi,bây giờ thì mảng 2 chiều ban đầu của bạn đã trở thành mảng 1 chiều dựa trên việc thao tác với con trỏ, bây giờ thêm đoạn code sắp xếp giá trị nữa là xong:
    PHP Code:
    for(int i=0;i<n-1;i++)
      for(
    int j=i+1;j<n;j++)
            if ( *(
    p+i*n+i) < *(p+i*n+j) ) Hoán vị 2 thằng này
    Bạn thử test nhé, lâu rồi mình không xài C nên có thể sai ^ ^,có gì cho mình biết kết quả

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

    À yêu cầu bài toán của mình là chỉ xét trực tiếp trên mảng 2 chiều thôi mà ko phải thông qua mảng 1 chiều . Còn con trỏ thì mình chưa có học . Nhưng mình có người bạn nó ko có dùng con trỏ hay mảng 1 chiều gì hết mà vẫn sắp được . Ý tưởng của nó đại loại là đầu tiên sắp tất cả các hàng trong ma trận theo chiều tăng dần các phần tử . Rồi lấy phần tử đầu tiên của dãy đầu tiên đem đi so sánh với các phần tử từ thứ i+1->row-1 của tất cả các cột để tìm phần tử min và đẩy nó vào ô đầu tiên ...cứ như thế cho đến hết mảng . Mình đọc mà chưa hiểu lắm mong các bạn chỉ rõ thêm

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

    Bạn có thể viết một hàm sắp xếp một mảng bất kỳ (Xem code trong diễn đàn)

    Sau đó bạn tiến hành sắp xếp từng hàng
    Tiếp theo bạn tiến hành sắp xếp theo từng cột là OK rồi.

    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 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    uhm cái này thì tụi mình không hiểu í lắm , nhưng nếu là một ma trận mà a[i][n] < a[i+1][1] mà chỉ sắp xếp trên mảng 1 chiều thì U có thể dàn nó ra rồi tiến hành sắp xếp tăng dần thôi ! Vì mảng 2 chiều là mảng 1 chiều mà . Rồi in ra như thế là xong rồi

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

    FULL CODE đây:
    PHP Code:
    #include<stdio.h>
    #include<conio.h>
    void main()
    {
        
    clrscr();
        
    int m,n;
        
    int a[10][10];
        
    printf("Nhap so dong:");
        
    scanf("%d",&m);
        
    printf("\nNhap so cot:");
        
    scanf("%d",&n);
        
    //nhap ma tran
        
    for(int i=0;i<m;i++)
            for(
    int j=0;j<n;j++)
            {
                
    printf("\na[%d][%d] = ",i,j);
                
    scanf("%d",&a[i][j]);
            }
        
    //in ma tran vua nhap
        
    printf("\nMA TRAN VUA NHAP:\n");
        for(
    i=0;i<m;i++)
        {
            for(
    j=0;j<n;j++)
                
    printf("%d\t",a[i][j]);
            
    printf("\n");
        }
        
    //sap xep theo hang
        
    for(i=0;i<m;i++)
            for(
    j=0;j<n-1;j++)
                for(
    int k=j+1;k<n;k++)
                    if (
    a[i][j]>a[i][k])
                    {
                        
    int tam=a[i][j];
                        
    a[i][j]=a[i][k];
                        
    a[i][k]=tam;
                    }
            
    // sap xep theo cot
        
    for(i=0;i<n;i++)
            for(
    j=0;j<m-1;j++)
                for( 
    k=j+1;k<m;k++)
                    if (
    a[j][i]>a[k][i])
                    {
                        
    int tam=a[j][i];
                        
    a[j][i]=a[k][i];
                        
    a[k][i]=tam;
                    }
        
    printf("\nMA TRAN SAU KHI SAP XEP TANG DAN:\n");
        for(
    i=0;i<m;i++)
        {
            for(
    j=0;j<n;j++)
                
    printf("%d\t",a[i][j]);
            
    printf("\n");
        }
        
    getch();


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

  1. Algorithm Lỗi vượt quá chỉ số của mảng khi sắp xếp tăng dần các phần tử các cột của ma trận
    Gửi bởi hocphp_1998 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 12-04-2011, 11:44 PM
  2. sắp xếp ma trận theo tổng tăng dần,tính định thức ma trận
    Gửi bởi hoahoctro207 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 20-12-2010, 02:23 PM
  3. Liệt kê các phần tử của ma trận theo thứ tụ tăng dần
    Gửi bởi rong3sao 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: 05-04-2009, 07:55 AM
  4. Sắp xếp ma trận theo thứ tự tăng dần của các số chẵn rồi đến các số lẻ??
    Gửi bởi thanhtung0601 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: 02-04-2009, 11:24 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