java基础


以下内容为本人的学习笔记,如需要转载,请声明原文链接   https://www.cnblogs.com/lyh1024/p/16720908.html


Ø 冒泡排序原理:

  1. 比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置;
  2. 每一次比较,都会产生出一个最大,或者最小的数字;
  3. 下一轮则可以少一次排序;
  4. 依次循环,知道结束!

冒泡排序的时间复杂度为O(n²)。

  • 代码
import java.util.Arrays;

public class SortTest {
public static void main(String[] args) {
int[] list1 = {1,33,25,6,4,64,6,99,7,93,44};
int[] list2 = sort(list1);
System.out.println(Arrays.toString(list2));
} public static int[] sort(int[] list){
int temp = 0;
     //外层循环判断走多少次
for (int i =0;i<list.length-1;i++){
      //内层循环,比较判断两个数,如果第一个数比第二个数大,这两个数就交换位置
for (int j = 0 ; j < list.length-1-i;j++){
if (list[j] > list[j+1]){
temp = list[j];
list[j] = list[j+1];
list[j+1] = temp;
}
}
}
return list;
}
}

注意:Arrays.toString()用来输出数组元素转字符串

Ø 使用稀疏数组的条件:

当一个数组中大部分都是0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。

Ø 稀疏数组原理:

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

    public class SortTest {
    public static void main(String[] args) {
    //1、创建一个二维数组11*11
    int[][] list1 = new int[11][11];
    list1[1][2] = 1;
    list1[2][3] = 2;
    System.out.println("输入原始数组...");
    for (int[] ints : list1) {
    for (int anInt : ints) {
    System.out.print(anInt+"\t");
    }
    System.out.println();
    }

    System.out.println("----------------------------------------------------");
    //转换 为稀疏数组保存
    //获取有效值的个数
    int sum = 0;
    for (int i=0;i<list1.length;i++){
    for (int j = 0;j<list1.length;j++){
    if (list1[i][j] != 0 ){
    sum++;
    }
    }
    }
    System.out.println("list1 的元素有:"+ sum+"个");
    //1、创建一个稀疏数组的数组
    int[][] list2 = new int[sum+1][3];
    list2[0][0] = 11;
    list2[0][1] = 11;
    list2[0][2] = sum;
    //2、遍历一个二维数组,将非零的值,存放在稀疏数组中
    int count = 0 ;
    for (int i = 1;i<list1.length;i++){
    for (int j = 0;j<list1.length;j++){
    if (list1[i][j] != 0 ) {
    count++;
    list2[i][0] = i;
    list2[i][1] = j;
    list2[i][2] = list1[i][j];
    }
    }
    }
    System.out.println("输入稀疏数组...");
    for (int[] ins:list2){
    for(int anInt: ins){
    System.out.print(anInt+"\t");
    }
    System.out.println();
    }

    System.out.println("--------------------------------------------------");
    //1、读取稀疏数组
    int[][] list3 = new int[list2[0][0]][list2[0][1]];
    //2、还原稀疏数组
    for (int i =1 ; i<list2.length;i++) { list3[list2[i][0]][list2[i][1]] = list2[i][2];
    }
    //3、打印
    System.out.println("输出还原的数组"); for (int[] ints:list3){
    for (int anInt:ints){
    System.out.print(anInt + "\t");
    }
    System.out.println();
    }
    }
    }

java基础-冒泡排序以及稀疏数组的更多相关文章

  1. Java基础(9)——数组

    难点儿的已经过去啦,现在又开始基础了哈~ 之前讲变量的时候,变量是一个个的呀~,那我要搞一串变量该啷个办呢?Java给我们出了个好东西叫数组(*^▽^*) 数组呢,就是将变量一组一组的存起来,这个也是 ...

  2. java基础——冒泡排序

    最近开始准备面试,所以将Java基础复习一遍,又学习了冒泡排序 冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序 ja ...

  3. Day9 数组 冒泡排序及稀疏数组!

    数组 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成. 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.(下标从0开始) 数 ...

  4. java基础学习04(数组与方法)

    数组与方法 一.完成的目标 1. 掌握数组的定义.使用方法.引用传递 2. 掌握方法及其方法的重载 3. 使用方法接收和返回一个数组 4. java新特性对数组的操作支持 二.数组的定义和使用 数组是 ...

  5. Java基础教程——二维数组

    二维数组 Java里的二维数组其实是数组的数组,即每个数组元素都是一个数组. 每个数组的长度不要求一致,但最好一致. // 同样有两种风格的定义方法 int[][] _arr21_推荐 = { { 1 ...

  6. Java基础进阶:学生管理系统数组方式分包源码实现,教师管理系统集合和数组两种方式源码实现,图书馆管理系统源码实现,现附重难点,代码实现源码,课堂笔记,课后扩展及答案

    1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码 ...

  7. 夯实Java基础(一)——数组

    1.Java数组介绍 数组(Array):是多个相同类型元素按一定顺序排列的集合. 数组是编程中最常见的一种数据结构,可用于存储多个数据,每个数组元素存放一个数据,通常我们可以通过数组元素的索引来访问 ...

  8. Java基础:整型数组(int[]、Integer[])排序

    Windows 10家庭中文版,java version "1.8.0_152",Eclipse Oxygen.1a Release (4.7.1a), 参考链接:http://w ...

  9. Java基础 -- 冒泡排序算法(带详细注释)

    冒泡排序的要点: 1.多轮排序,每轮排序中选出最大的元素放在最顶端,并且下次排序不再使用该元素; 2. 使用双for循环,外层for循环控制要排序的次数(轮数), 内层for循环控制当前要排序的元素并 ...

随机推荐

  1. 简单使用 MySQL 索引

    MySQL 索引 1 什么是索引 在数据库表中,对字段建立索引可以大大提高查询速度.通过善用这些索引,可以令 MySQL 的查询和 运行更加高效. 如果合理的设计且使用索引的 MySQL 是一辆兰博基 ...

  2. 零基础学Java(10)面向对象-使用LocalDate类完成日历设计

    前言 在我们完成这个日历设计前,需要了解Java中的预定义类LocalDate的一些用法 语法 LocalDate.now() // 2022-07-01 会构造一个新对象,表示构造这个对象时的日期. ...

  3. Netty-如何写一个Http服务器

    前言 动机 最近在学习Netty框架,发现Netty是支持Http协议的.加上以前看过Spring-MVC的源码,就想着二者能不能结合一下,整一个简易的web框架(PS:其实不是整,是抄) 效果 项目 ...

  4. 基于SqlSugar的开发框架循序渐进介绍(13)-- 基于ElementPlus的上传组件进行封装,便于项目使用

    在我们实际项目开发过程中,往往需要根据实际情况,对组件进行封装,以更简便的在界面代码中使用,在实际的前端应用中,适当的组件封装,可以减少很多重复的界面代码,并且能够非常简便的使用,本篇随笔介绍基于El ...

  5. Linux学习系列--如何在Linux中进行文件的管理

    文件 在常见的Linux的文件系统中,经常使用能了解到的文件管理系统是分为多个文件夹进行管理的. 如何查看文件路径 pwd ,在文件目录中,会有一个点(.)代表的是当前目录,两个点(..)代表的是当前 ...

  6. Python花式读取大文件(10g/50g/1t)遇到的性能问题(面试向)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_97 最近无论是面试还是笔试,有一个高频问题始终阴魂不散,那就是给一个大文件,至少超过10g,在内存有限的情况下(低于2g),该以什 ...

  7. 流量如何才能变现?实际测试谷歌广告联盟(Google Adsense)的广告效果以及如何优化相关代码

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_150 2010年,谷歌正式退出中国市场,无数人扼腕叹息,如今十年过去了,谷歌还有两条重要的业务线并没有完全退出,一个是页面统计业务 ...

  8. 11. MGR技术架构及数据同步、认证机制 | 深入浅出MGR

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 目录 1. MGR架构 2. 事务数据同步.认证过程 ...

  9. 谈谈你对Promise的理解

    一.Promise是什么? 理解 抽象表达: Promise 是一门新的技术(ES6 规范) Promise 是 JS 中进行异步编程的新解决方案(备注:旧方案是单纯使用回调函数) 具体表达: 从语法 ...

  10. 解决git报错

    解决git报错:fatal: unable to access "https://github.com/.../.git/" 1.在git中执行(记得分开执行) git confi ...