数组,Arrays类,冒泡排序,稀疏数组

 

数组可以用Arrays类做一些操作,比如排序Arrays.sort()等

 

冒泡排序

依次对比数组中相邻两个数,大的向后排,小的向前排,对比数组的length次,即全部对比完

public static void mysort(int[] t){
       int temp;
       for (int i = 0; i < t.length; i++) {
           //因为下面比较大小需要用到相邻的两个数即j+1,所以下面j要小与t.length-1,
           //-i 是因为每执行一次会把最大的数放到最后,后面就不用再执行最后一次比较
           for (int j = 0; j < t.length-1-i; j++) {
               if(t[j]>t[j+1]){
                   temp = t[j+1];
                   t[j+1] = t[j];
                   t[j] = temp;
              }
          }
      }
  }

 

稀疏数组

把一个较为复杂的数组压缩成精简一点的数组,但是我感觉比较试用二维数组中大部分值都为默认值0的情况,要是每个数都有值的话,感觉也压不起来。。。

稀疏数组的第一行第一列表示原数组的行数,第一行的第二列表示原数组的列数,第一行的第三列表示原数组有效值个数,

第二行第一列表示第一个有效值的行数,第二列表示第一个有效值的列数,第三个表示有效值的值

第三行第一列表示第二个有效值的行数,第二列表示第二个有效值的列数,第三个表示有效值的值

依次类推

//设置原数组行数类书
int[][] arrays = new int[11][11];
//设置有效值
       arrays[1][2] = 1;
       arrays[2][3] = 2;
//统计有效值个数
       int sum = 0;
       for (int i = 0; i < arrays.length; i++) {
           for (int j = 0; j < arrays[i].length; j++) {
               System.out.print(arrays[i][j] + "\t");
               if(arrays[i][j] != 0 ){
                   sum++;
              }
          }
           System.out.println();
      }
       System.out.println("===========================");
       //转化为稀疏数组,sum为有效值个数,稀疏数组还有第一行的原数组行列数,所以行数要加1
       int[][] zlarrays = new int[sum+1][3];
//设置稀疏数组第一行数据
       zlarrays[0][0]=11;
       zlarrays[0][1]=11;
       zlarrays[0][2]=sum;
//设置稀疏数组有效值数据
       int count = 0;
       for (int i = 0; i < arrays.length; i++) {
           for (int j = 0; j < arrays[i].length; j++) {
               if(arrays[i][j]!=0){
                   count++;
                   zlarrays[count][0] = i;//有效值行
                   zlarrays[count][1] = j;//有效值列
                   zlarrays[count][2] = arrays[i][j];//有效值
              }
          }
      }

       for (int i = 0; i < zlarrays.length; i++) {
           for (int j = 0; j < zlarrays[i].length; j++) {
               System.out.print(zlarrays[i][j]+"\t");
          }
           System.out.println();
      }
       System.out.println("=================================");
       //还原数组行列值
       int[][] hyarrays = new int[zlarrays[0][0]][zlarrays[0][1]];
//稀疏数组第一行是行列,所以还原值从第二行开始
       for (int i = 1; i < zlarrays.length; i++) {
           hyarrays[zlarrays[i][0]][zlarrays[i][1]] = zlarrays[i][2];
      }
       for (int i = 0; i < hyarrays.length; i++) {
           for (int j = 0; j < hyarrays[i].length; j++) {
               System.out.print(hyarrays[i][j]+"\t");
          }
           System.out.println();
      }

 

posted @   sumling  阅读(284)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示