Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การเรียงลำดับเมทริกซ์แบบแถวต่อแถวเทียบกับแบบคอลัมน์ต่อคอลัมน์ใน C++

ภาพรวม

เมทริกซ์สามารถเรียงลำดับได้สองวิธี: แบบแถวต่อแถว (Row-major) เข้าถึงแต่ละแถวตามลำดับ ตัวอิลิเมนต์ในแถวจากดัชนี 0 ถึงดัชนีสุดท้าย ส่วนแบบคอลัมน์ต่อคอลัมน์ (Column-major) เข้าถึงจากคอลัมน์แรกถึงคอลัมน์สุดท้ายตามลำดับ

ในเมทริกซ์ 2D M[i][j] ดัชนี i แทนแถว j แทนคอลัมน์ สำหรับ Row-major เริ่มจาก i=0 แถวแรก 0≤j<ดัชนีสุดท้าย i=1 แถวที่สอง ... i=แถวสุดท้าย สำหรับ Column-major เริ่มจาก j=0 คอลัมน์แรก 0≤i<ดัชนีสุดท้าย j=1 คอลัมน์ที่สอง ... j=คอลัมน์สุดท้าย ลำดับดัชนีในอาร์เรย์ 2D M[i][j] คงที่ i สำหรับแถว j สำหรับคอลัมน์

ตัวอย่าง

อินพุต −

int arr[MAX][MAX] = { {1,2,3,4,5},{6,7,8,9,0}, 
    {5,4,3,2,1},{0,0,0,0,0}, 
    {8,9,7,6,1}};

เอาต์พุต −

Row Major Traversal 1 2 3 4 5 6 7 8 9 0 5 4 3 2 1 0 0 0 0 0 8 9 7 6 1 
Column Major Traversal 1 6 5 0 8 2 7 4 0 9 3 8 3 0 7 4 9 2 0 6 5 0 1 0 1

คำอธิบาย − ผลลัพธ์อธิบายตัวเอง

การเรียงลำดับเมทริกซ์แบบแถวต่อแถวเทียบกับแบบคอลัมน์ต่อคอลัมน์ใน C++

อินพุต −

int arr[MAX][MAX] = { {1,1,1,1,1},{2,2,2,2,2}, 
    {3,3,3,3,3},{4,4,4,4,4}, 
    {5,5,5,5,5}};

เอาต์พุต −

Row Major Traversal 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 
Column Major Traversal 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

คำอธิบาย − ผลลัพธ์อธิบายตัวเอง

แนวทางการแก้ปัญหา

ใช้ลูป for สองชั้นสำหรับพิมพ์เมทริกซ์ 2D แบบแถวต่อแถวและคอลัมน์ต่อคอลัมน์

  • รับอาร์เรย์อินพุต arr[][]
  • ตัวแปร i และ j เป็นดัชนีแถวและคอลัมน์
  • Row-major: ลูปนอก i=0 ถึง MAX-1 ลูปใน j=0 ถึง MAX-1 พิมพ์ arr[i][j]
  • Column-major: ลูปนอก j=0 ถึง MAX-1 ลูปใน i=0 ถึง MAX-1 พิมพ์ arr[i][j]

ตัวอย่างโค้ด C++

#include <bits/stdc++.h> 
using namespace std; 
#define MAX 5 

int main(){ 
    int arr[MAX][MAX] = { {1,2,3,4,5},{6,7,8,9,0},{5,4,3,2,1},{0,0,0,0,0},{8,9,7,6,1}}; 
    int i, j; 
    cout << "Row Major Traversal " << endl; 
    for(i = 0; i < MAX; i++){ 
        cout << endl; 
        for(j = 0; j < MAX; j++){ 
            cout << " " << arr[i][j]; 
        } 
    } 
    cout << endl << endl; 
    cout << "Column Major Traversal " << endl; 
    for(j = 0; j < MAX; j++){ 
        cout << endl; 
        for(i = 0; i < MAX; i++){ 
            cout << " " << arr[i][j]; 
        } 
    } 
    return 0; 
}

ผลลัพธ์

Row Major Traversal 1 2 3 4 5 6 7 8 9 0 5 4 3 2 1 0 0 0 0 0 8 9 7 6 1 
Column Major Traversal 1 6 5 0 8 2 7 4 0 9 3 8 3 0 7 4 9 2 0 6 5 0 1 0 1