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. 博客从 CloudBase 迁移至云主机

    迁移起因 原来的博客 其实从很久以前就想要写博客,但总是断断续续的,一直都没有认真地开始. 最终,决定使用静态博客工具作为自己博客的承载体.在多种工具的比较下,最终选择了 Hugo 并部署到 Gith ...

  2. 算法竞赛进阶指南0x35高斯消元与线性空间

    高斯消元 目录 高斯消元 ACWing207. 球形空间产生器(点击访问) 求解思路 代码 ACWing208. 开关问题(点击访问) 思路 代码 总结 欣赏 线性空间 定义 ACWing209. 装 ...

  3. ESP8266 使用 DRV8833驱动板驱动N20电机

    RT 手里这块ESP8266是涂鸦的板子,咸鱼上三块一个买了一堆,看ESP8266-12F引脚都差不多的.裸焊了个最小系统,加两个按钮(一个烧录,一个复位) 1. 准备工作 搜索过程中发现 DRV88 ...

  4. CSS 导航栏底线向两边延伸动画

    利用元素向左移动的同时,宽度变长,实现两边延伸效果. react代码: <ul className="tab"> { moduleList.map((item: any ...

  5. Str 真题解(置换)

    目录 题面 置换 这里没有群论 置换 置换的乘法(复合) 置换乘法的单位元 置换乘法的结合律 置换快速幂 置换求乘法逆 真题解 一种可能的代码实现 关于循环节做法 题面 对于字符串 \(s\) 定义一 ...

  6. 技术分享 | load data导致主键丢失的神秘问题

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1 ...

  7. Regular采样类定义和测试

    这个算法是均匀采样算法,继承于Sampler类. 类声明: #pragma once #ifndef __REGULAR_HEADER__ #define __REGULAR_HEADER__ #in ...

  8. 记录一个i变量引发的事故

    概述 近期开发中遇到一个特别的问题,觉得很有必要与你下来.就是由于在开发中一个很小的疏忽,导致了很大的问题,是什么呢? 现象 我的程序突然引发了v8内部的错误,提示都是c++的,如下.程序一启动就直接 ...

  9. 最大连续子序列(简单DP实现)

    最大连续子序列 最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大.我们一起用多种方式,逐步优化解 ...

  10. 【HTML】学习路径4-align对齐-标签属性

    每个标签都可以设置各种属性,比如可以给一个段落标签添加一个name的属性: <p name="段落标签1"> 这一节我们学习一个属性:align对齐标签 第一章:ali ...