冒泡排序+稀疏数组

七、八大排序

冒泡排序

两两之间进行比较,较小或较大的向前或向后移。

//冒泡排序方法
// 1。 比较数组中,两个相邻的元素,如果第一个数比第二个数大,我么交换他们的位置
// 2。 每一次比较,都会产生出一个最大,或者最小的数字
//3。下一轮就可以少一次排序
//4。一次循环,直到结束

交换两个数的位置,通常要借助第三方变量。

a、b交换值

a = c;

a = b; //把b赋值给a

b = c; //把a赋值给c的值赋值给b,达到a、b交换值的目的

package array;
import java.util.Arrays;
public class ArrayDemo07 {
   public static void main(String[] args) {
       int[] = {1,3456,564,67,78,9,47647,6663,3};
       int[] sort sort(a); //调用排序后的数组
       System.out.println(Arrays.toString(a)); //[47647, 6663, 3456, 564, 78, 67, 9, 3, 1]
  }
   //冒泡排序方法
   // 1。 比较数组中,两个相邻的元素,如果第一个数比第二个数大,我么交换他们的位置
   // 2。 每一次比较,都会产生出一个最大,或者最小的数字
   //3。下一轮就可以少一次排序
   //4。一次循环,直到结束

   public static int[] sort(int[] array){
       // 临时变量 - 换位置
       int temp 0;

       //外层循环,判断我们这个循环要走多少次 - array.length-1
       for (int 0; array.length-1; i++) {

           //内层循环,比较两个数字,如果第一个数比第二个数大,则交换他们的位置
           for (int 0; array.length-1-i; j++) {

               if(array[j+1] array[j]){ //当前数字比后一个数字小的话
                   temp array[j];
                   array[j] array[j+1]; //把较大的值赋值给较小的值
                   array[j+1] temp;
              }

          }
      }
       return array;
  }

}

 

稀疏数组 - 压缩算法

当一个数组中,大部分元素为0或同一个值的数组时,可以用稀疏数组来保存该数组

稀疏数组的处理方式是:

  • 记录数组一共有几行几列,有多少个不同值

  • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

截屏2021-02-09 16.01.50

 

截屏2021-02-09 16.16.13

 

然后转换为稀疏数组

package array;

public class ArrayDemo08 {
   public static void main(String[] args) {
       //1. 创建一个二维数组 11*11 0 - 没有棋子,1-黑棋,2-白棋

       int[][] array1 new int[11][11];
       array1[1][2] 1;
       array1[2][3] 1;
       //输出原始数组
       System.out.println("输出原始数组");
       for (int[] ints : array1) {
           for (int anInt : ints) {
               System.out.print(anInt+"\t");
          }
           System.out.println();
      }
       System.out.println("~~~~~~~~~~~~~");
       //转换为稀疏数组保存
       //获取有效值的个数
       int sum 0;
       for (int 0; 11; i++) {
           for (int 0; 11; j++) {
               if(array1[i][j] != 0){
                   sum++;
              }

          }

      }
       System.out.println("有效值的个数: "+sum);

       //2.创建一个稀疏数组的数组
       int[][] array2 new int[sum+1][3];

       array2[0][0] 11;
       array2[0][1] 11;
       array2[0][2] sum;

       //遍历二维数组,将非0的值,存放稀疏数组中
       int count 0;
       for (int 0; array1.length; i++) {
           for (int 0; array1[i].length; j++) {
               if (array1[i][j] != 0){
                   count++;
                   array2[count][0] i;
                   array2[count][1] j;
                   array2[count][2] array1[i][j];
              }

          }

      }
       System.out.println("稀疏数组");
       for (int 0; array2.length; i++) {
           System.out.print((array2[i][0]+"\t"
                   +array2[i][1]+"\t"
                   +array2[i][2]+"\t"));
      }
       System.out.println("~~~~~~~~~~~`");
       System.out.println("还原");
       //1。 读取稀疏数组
       int[][] array3 new int [array2[0][0]][array2[0][1]];

       //2.给其中的元素还原它的值
       for (int 1; array2.length; i++) {
           array3[array2[i][0]][array2[i][1]] array2[i][2];
      }
       //3.打印
       System.out.println("输出还原的数组");
       for (int[] ints : array1) {
           for (int anInt : ints) {
               System.out.print(anInt+"\t");
          }
           System.out.println();
      }
  }
}

 

输出结果:

输出原始数组 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

有效值的个数: 2 稀疏数组 11 11 2 1 2 1 2 3 1 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 还原 输出还原的数组 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ·0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

posted @ 2021-02-09 16:50  NTE701  阅读(126)  评论(0)    收藏  举报
1