java和js实现普通矩阵和稀疏矩阵(非满矩阵)的转置

一、方阵的转置(JAVA实现)

(方阵的转制比较容易实现,无需借助其它矩阵,只需要一个临时变量,用于矩阵中两个位置数据的交换即可,本例中的temp即是该作用)

package test;

public class Test3
{
 public static void main(String[] args)
 {
  int Array[][] = { { 1, 2, 3, 9 }, { 4, 5, 6, 8 }, { 7, 8, 9, 2 }, { 0, 2, 3, 4 } };  //定义四行四列的方阵
  

//输出原矩阵
  System.out.println("原矩阵为:");
  for (int i = 0; i < Array.length; i++)
  {
   for (int j = 0; j < Array[i].length; j++)
   {
    System.out.print(Array[i][j] + "  ");
   }
   System.out.println();
  }
  
  //在原矩阵上进行位置互换,实现转置
  int temp;
  for (int i = 0; i < Array.length; i++)
  {
   for (int j = i; j < Array.length; j++)   // "j=i"是很重要的,不能j=0开始,否则转置后的矩阵再次进行转置(调换位置后的两个数据再次进行了位置调换),恢复到了原矩阵
   {
    temp = Array[i][j];
    Array[i][j] = Array[j][i];
    Array[j][i] = temp;
   }
  }
  

//输出转制后的矩阵
  System.out.println("转置后矩阵为:");
  for (int k = 0; k < Array.length; k++)
  {
   for (int L = 0; L < Array[k].length; L++)
   {
    System.out.print(Array[k][L] + "  ");
   }
   System.out.println();
  }
 }
}

输出结果如下图所示:

 

 

二、稀疏矩阵的转置(JAVA实现)

(稀疏矩阵是指矩阵中有许多的0或者其它的相同元素,该代码实现非满矩阵的转置,转制后的位置若没有值,则输出空格)

package test;

public class Test
{
 public static void main(String[] args)
 {
  int arr[][] = { { 1, 2, 3, 6}, { 4, 5}, { 7, 8, 9, 10}, {12}};
  
  int max = arr[0].length;// 获取矩阵中所有行的列数目的最大值(这个最大值即为转置后矩阵的行数)
  int row = arr.length;  //原矩阵的行数
  
  for (int i = 1; i < row; i++)
  {
   if (arr[i].length > max)
   {
    max = arr[i].length;
   }
  }
  
//定义转制后的矩阵arr2,并进行初始化。原矩阵的行数是转置后矩阵的列数,原数矩阵的列数是转置后矩阵的行数。
  int arr2[][] = new int[max][row];
  
  // 对arr2进行赋值
  for (int i = 0; i < row; i++)
  {
   for (int j = 0; j < arr[i].length; j++)
   {
    arr2[j][i] = arr[i][j];
   }
  }
  
  // 输出原来矩阵arr
  System.out.println("原来的矩阵为;");
  for (int i = 0; i <row; i++)
  {
   for (int j = 0; j < arr[i].length; j++)
   {
    System.out.print(arr[i][j] + "  ");  //两个空格
   }
   System.out.println();
  }

  // 输出转置后的矩阵arr2
  System.out.println("转置后的矩阵为:");
  for (int i = 0; i < arr2.length; i++)
  {
   for (int j = 0; j < arr2[i].length; j++)
   {
    if (arr2[i][j] != 0)
     System.out.print(arr2[i][j] + "  ");//两个空格
    else
     System.out.print("   ");  //三个空格
   }
   System.out.println();
  }
 }
}

输出结果如下图所示:

 

三、稀疏矩阵的转置(JS实现)

<script language="javascript">

var arr = [ [ 1, 2, 3, 6], [ 4, 5], [ 7, 8, 9, 10],["a", "b"]];  //JS元素值可以为任意类型,这里的矩阵有数字,也有字母。
var arr1=[];

var max = arr[0].length;  //max为原矩阵所有行中列数最大的值,该值为新矩阵的行数。
var row = arr.length;  //原矩阵的行数

for (var i = 1; i < row; i++)  //求max的最大值
{
 if (arr[i].length > max)
 {
  max = arr[i].length;
 }
}

//  window.alert("原矩阵最大行数为:"+row);
//  window.alert("原矩阵最大列数为:"+max);

//初始化arr1矩阵,定下有多少行。(必须这样,否则无法为arr2动态添加数据,下面“********”行会报错。)
for(var i=0;i<max;i++)
{
 arr1[i]=[];
}

//遍历原矩阵,动态的为矩阵arr2添加数据
for(var i=0;i<row;i++)
{
 for(var j=0;j<arr[i].length;j++)
 {
  arr1[j][i]=arr[i][j];  //********************************
 }
}

document.writeln("原来的矩阵:");
document.write("<br/>");
for(var i=0;i<arr.length;i++)
{
 for(var j=0;j<arr[i].length;j++)
 {
  document.writeln(arr[i][j]+"&nbsp;&nbsp;");
 }
 document.write("<br/>");
}

document.writeln("转置后的矩阵:");
document.write("<br/>");
for(var i=0;i<arr1.length;i++)
{
 for(var j=0;j<arr1[i].length;j++)
 {
 if(arr1[i][j]==null)
  document.writeln("&nbsp;&nbsp;&nbsp;");
 else
  document.writeln(arr1[i][j]+"&nbsp;&nbsp;");
 }
 document.write("<br/>");
}

</script>

输出结果如下图所示:

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值