给定一个N x N矩阵,我们的任务是以升序和降序交替打印矩阵的行。
例子:
Input:
5 7 3 4
9 5 8 2
6 3 8 1
5 8 9 3
Output:
3 4 5 7
9 8 5 2
1 3 6 8
9 8 5 3
Explanation:
Here the first row is sorted in ascending order, second row sorted in descending order, third row sorted in ascending order and so on.
Input:
7 3 4
3 8 2
3 6 1
Output:
3 4 7
8 3 2
1 3 6
Explanation:
Here the first row is sorted in ascending order, second row sorted in descending order, third row sorted in ascending order.
解决方法
为了解决上面提到的问题,我们迭代 0 到 N 并检查第 i 行是偶数还是奇数,如果是偶数,则按升序对行进行排序,否则按降序对第 i 行进行排序。在 N 次迭代后返回矩阵。
下面是上述方法的实现:
C++
// C++ implementation to print row of
// matrix in ascending or descending
// order alternatively
#include
#define N 4
void func(int a[][N])
{
// Iterate matrix rowwise
for (int i = 0; i < N; i++) {
// Sort even rows in ascending order
if (i % 2 == 0) {
for (int j = 0; j < N; j++) {
for (int k = j + 1; k < N; ++k) {
// compare adjacent elements
if (a[i][j] > a[i][k]) {
// swap adjacent element
int temp = a[i][j];
a[i][j] = a[i][k];
a[i][k] = temp;
}
}
}
}
// Sort even rows in descending order
else {
for (int j = 0; j < N; j++) {
for (int k = j + 1; k < N; ++k) {
// compare adjacent elements
if (a[i][j] < a[i][k]) {
// swap adjacent element
int temp = a[i][j];
a[i][j] = a[i][k];
a[i][k] = temp;
}
}
}
}
}
// Printing the final Output
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
}
// Driver code
int main()
{
int a[N][N] = {
{ 5, 7, 3, 4 },
{ 9, 5, 8, 2 },
{ 6, 3, 8, 1 },
{ 5, 8, 9, 3 }
};
func(a);
return 0;
}
Java
// Java implementation to print row of
// matrix in ascending or descending
// order alternatively
class GFG{
static int N = 4;
static void func(int a[][])
{
int i, j, k;
// Iterate matrix rowwise
for(i = 0; i < N; i++)
{
// Sort even rows in ascending order
if (i % 2 == 0)
{
for(j = 0; j < N; j++)
{
for(k = j + 1; k < N; ++k)
{
// Compare adjacent elements
if (a[i][j] > a[i][k])
{
// Swap adjacent element
int temp = a[i][j];
a[i][j] = a[i][k];
a[i][k] = temp;
}
}
}
}
// Sort even rows in descending order
else
{
for(j = 0; j < N; j++)
{
for(k = j + 1; k < N; ++k)
{
// Compare adjacent elements
if (a[i][j] < a[i][k])
{
// Swap adjacent element
int temp = a[i][j];
a[i][j] = a[i][k];
a[i][k] = temp;
}
}
}
}
}
// Printing the final Output
for(i = 0; i < N; i++)
{
for(j = 0; j < N; j++)
{
System.out.print(a[i][j] + " ");
}
System.out.print("\n");
}
}
// Driver code
public static void main (String []args)
{
int a[][] = { { 5, 7, 3, 4 },
{ 9, 5, 8, 2 },
{ 6, 3, 8, 1 },
{ 5, 8, 9, 3 } };
func(a);
}
}
// This code is contributed by chitranayal
Python3
# Python3 implementation to print row of
# matrix in ascending or descending
# order alternatively
N = 4
def func(a):
# Iterate matrix rowwise
for i in range(N):
# Sort even rows in ascending order
if i % 2 == 0:
for j in range(N):
for k in range(j + 1, N):
# Compare adjacent elements
if a[i][j] > a[i][k]:
# Swap adjacent element
temp = a[i][j]
a[i][j] = a[i][k]
a[i][k] = temp
# Sort even rows in descending order
else :
for j in range(N):
for k in range(j + 1, N):
# Compare adjacent elements
if a[i][j] < a[i][k]:
# Swap adjacent element
temp = a[i][j]
a[i][j] = a[i][k]
a[i][k] = temp
# Printing the final output
for i in range(N):
for j in range(N):
print(a[i][j], end = " ")
print()
# Driver code
if __name__ == '__main__':
a = [ [ 5, 7, 3, 4 ],
[ 9, 5, 8, 2 ],
[ 6, 3, 8, 1 ],
[ 5, 8, 9, 3 ] ]
func(a)
# This code is contributed by mohit kumar 29
C#
// C# implementation to print row of
// matrix in ascending or descending
// order alternatively
using System;
class GFG{
static int N = 4;
static void func(int[,]a)
{
int i, j, k;
// Iterate matrix rowwise
for(i = 0; i < N; i++)
{
// Sort even rows in ascending order
if (i % 2 == 0)
{
for(j = 0; j < N; j++)
{
for(k = j + 1; k < N; ++k)
{
// Compare adjacent elements
if (a[i, j] > a[i, k])
{
// Swap adjacent element
int temp = a[i, j];
a[i, j] = a[i, k];
a[i, k] = temp;
}
}
}
}
// Sort even rows in descending order
else
{
for(j = 0; j < N; j++)
{
for(k = j + 1; k < N; ++k)
{
// Compare adjacent elements
if (a[i, j] < a[i, k])
{
// Swap adjacent element
int temp = a[i, j];
a[i, j] = a[i, k];
a[i, k] = temp;
}
}
}
}
}
// Printing the readonly Output
for(i = 0; i < N; i++)
{
for(j = 0; j < N; j++)
{
Console.Write(a[i, j] + " ");
}
Console.Write("\n");
}
}
// Driver code
public static void Main(String []args)
{
int[,]a = { { 5, 7, 3, 4 },
{ 9, 5, 8, 2 },
{ 6, 3, 8, 1 },
{ 5, 8, 9, 3 } };
func(a);
}
}
// This code is contributed by Princi Singh
Javascript
输出:
3 4 5 7
9 8 5 2
1 3 6 8
9 8 5 3
时间复杂度: O(N 3 )
辅助空间: O(1)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live