java基础-冒泡排序以及稀疏数组
java基础
以下内容为本人的学习笔记,如需要转载,请声明原文链接 https://www.cnblogs.com/lyh1024/p/16720908.html
Ø 冒泡排序原理:
- 比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置;
- 每一次比较,都会产生出一个最大,或者最小的数字;
- 下一轮则可以少一次排序;
- 依次循环,知道结束!
冒泡排序的时间复杂度为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基础-冒泡排序以及稀疏数组的更多相关文章
- Java基础(9)——数组
难点儿的已经过去啦,现在又开始基础了哈~ 之前讲变量的时候,变量是一个个的呀~,那我要搞一串变量该啷个办呢?Java给我们出了个好东西叫数组(*^▽^*) 数组呢,就是将变量一组一组的存起来,这个也是 ...
- java基础——冒泡排序
最近开始准备面试,所以将Java基础复习一遍,又学习了冒泡排序 冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序 ja ...
- Day9 数组 冒泡排序及稀疏数组!
数组 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成. 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.(下标从0开始) 数 ...
- java基础学习04(数组与方法)
数组与方法 一.完成的目标 1. 掌握数组的定义.使用方法.引用传递 2. 掌握方法及其方法的重载 3. 使用方法接收和返回一个数组 4. java新特性对数组的操作支持 二.数组的定义和使用 数组是 ...
- Java基础教程——二维数组
二维数组 Java里的二维数组其实是数组的数组,即每个数组元素都是一个数组. 每个数组的长度不要求一致,但最好一致. // 同样有两种风格的定义方法 int[][] _arr21_推荐 = { { 1 ...
- Java基础进阶:学生管理系统数组方式分包源码实现,教师管理系统集合和数组两种方式源码实现,图书馆管理系统源码实现,现附重难点,代码实现源码,课堂笔记,课后扩展及答案
1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码 ...
- 夯实Java基础(一)——数组
1.Java数组介绍 数组(Array):是多个相同类型元素按一定顺序排列的集合. 数组是编程中最常见的一种数据结构,可用于存储多个数据,每个数组元素存放一个数据,通常我们可以通过数组元素的索引来访问 ...
- Java基础:整型数组(int[]、Integer[])排序
Windows 10家庭中文版,java version "1.8.0_152",Eclipse Oxygen.1a Release (4.7.1a), 参考链接:http://w ...
- Java基础 -- 冒泡排序算法(带详细注释)
冒泡排序的要点: 1.多轮排序,每轮排序中选出最大的元素放在最顶端,并且下次排序不再使用该元素; 2. 使用双for循环,外层for循环控制要排序的次数(轮数), 内层for循环控制当前要排序的元素并 ...
随机推荐
- 5-18 Nacos配置中心 | RestTemplate
配置中心 什么是配置中心 所谓配置中心:将项目需要的配置信息保存在配置中心,需要读取时直接从配置中心读取,方便配置管理的微服务工具 我们可以将部分yml文件的内容保存在配置中心 一个微服务项目有很多子 ...
- 常用的函数式接口_Predicate接口_默认方法and和Predicate接口练习_集合接口筛选
默认方法:and 既然是条件判断,就会存在与.或.非三种常见的逻辑关系.其中将两个Preadicate条件使用"与"逻辑连接起来实现"并且"的效果时,可以使用d ...
- 1.9. 触摸按钮(touch pad)测试
1.9.1. 基础 Esp32部分GPIO内置了touch按钮功能(电容式),具体有touch功能的引脚在配置为touchpad后,单片机读入的电容值随是否被触碰发生变化,系统根据电容值的变化判断判断 ...
- JavaWeb--基本概念、Web服务器与Tomcat
前言 Java Web 其实就是一个技术的总和,把Web看成一个容器而已主要使用JavaEE技术来实现.在加上各种中间件. 整个javaWeb阶段的内容通过实际的案例贯穿学习, 所涉及到的技术知识点会 ...
- Kafka与Spark案例实践
1.概述 Kafka系统的灵活多变,让它拥有丰富的拓展性,可以与第三方套件很方便的对接.例如,实时计算引擎Spark.接下来通过一个完整案例,运用Kafka和Spark来合理完成. 2.内容 2.1 ...
- linux 安装 apache+mysql+php
http://www.cnblogs.com/lufangtao/archive/2012/12/30/2839679.html
- Python基础之数据类型和变量
数据类型 计算机顾名思义就是可以做数学机器,可以处理各种数值,计算机还能处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据是需要定义不同的数据类型的,在Python中,能够直接处理的数据 ...
- 【Maui正式版】创建可跨平台的Maui程序,以及有关依赖注入、MVVM双向绑定的实现和演示
前言:Maui终于在昨天(2022年8月9日)推送出来了.今儿就迫不及待来把玩一下先. A.我本地已有VS2022,不过版本比较老,此处选择更新.工具 -> 获取功能和更新里面,可以获取到新版本 ...
- 移动端实现HTML5 mp3录音踩坑指南:系统播放音量变小、一些机型录音断断续续 之 MediaRecorder和AudioWorklet的终极对决
目录 H5录音见坑填坑 采用MediaRecorder采集音频 音频格式:WebM和PCM 从WebM封装容器中提取PCM数据 录音的兼容性 困扰已久的H5录音时系统播放音量变小的问题 H5录音见坑填 ...
- 监督学习集成模型——AdaBoost
一.集成学习与Boosting 集成学习是指将多个弱学习器组合成一个强学习器,这个强学习器能取所有弱学习器之所长,达到相对的最佳性能的一种学习范式. 集成学习主要包括Boosting和Bagging两 ...