Day16:冒泡排序详解
冒泡排序
冒泡循环有两层循环,第一层控制循环轮数,第二层循环代表元素比较的次数。
利用冒泡排序获得升序或者降序的数组
//利用冒泡排序将一个数组进行降序排序
//思路:
//冒泡排序是将相邻元素进行比较,我们将两个相邻的元素进行比较,即后者与前者比较,如果后者较大,则交换两者位置
//当交换的次数够多,则能够实现降序排序
//数组内的每个元素都比较了一次我们称之为一轮比较
//通过大小值互换位置,每一轮比较下来总有最小的值会被扔在最后,且下一轮比较这个极值无需再参与比较
//数组有多少元素,就有多少坑位,每一个坑位都会在一次次比较中被淘汰出来的极值填住
//因为每轮比较都会淘汰一个元素,所以下一轮的比较次数就会少比较一次,即少比较的次数与轮数相等;元素间的比较次数会随着轮数的增加而减少
import java.util.Arrays;//导入类,方便后面使用类方法
public class Demo{
public static void main(String[] args){
int[] array={4,64,65,4164,564,156};
int[] b=sort(array);//使用我们自己写的降序方法,导入数组
System.out.println(Arrays.toString(b));//使用Arrays类的toString方法将数组进行打印
}
//我们先写一个降序的方法,等会直接调用
public static int[] sort(int[] array){
int a=0;
for(int i=0;i<array.length-1;i++){//代表比较的轮数,因为每次淘汰一个元素,有多少坑位就需要多少次淘汰,就需要多少轮
for(int j=0;j<array.length-1-i;j++){//这里j<array.length-1-i需要好好理解一下,这里代表的是每一轮比较的次数
//这里两个for循环,第一个for循环是代表要比较的轮数,
if(array[j]<array[j+1]){//如果换成>,则此方法为升序排序
a=array[j];
array[j]=array[j+1];//两个元素不能相互赋值,必须借助第三方来转移
array[j+1]=a;
}
}
}
return array;
}
上面我们已经成功写出冒泡排序的方法来对乱序的数组进行排序,但是当我们得到的一个数组他的排序方式已经是按照我们所写的方式进行排序的,那么我们再进行此方法进行排序,属实浪费资源,因此为了方法更加完善,我们将代码优化。在方法中加入一个执行标志来判断。
import java.util.Arrays;
public class Demo{
public static void main(String[] args){
int[] array={4,64,65,4164,564,156};
int[] b=sort(array);
System.out.println(Arrays.toString(b));
}
public static int[] sort(int[] array){
int a=0;
for(int i=0;i<array.length-1;i++){
boolean tag=false;//先定义一个标签
for(int j=0;j<array.length-1-i;j++){
if(array[j]<array[j+1]){
a=array[j];
array[j]=array[j+1];
array[j+1]=a;
tag=true;//如果有发生比较,即发生过位置交换,则标签变值
}
if(tag==false){
break;//如果元素一轮比较下来都没有发生位置互换,则说明排序满足当前方法的排序,无需再次下轮比较
}
}
}
return array;
}
Day16:冒泡排序详解的更多相关文章
- C#冒泡排序详解
今天写一简单的冒泡排序,带有详细的中文注释,新手一定要看看! 因为这是找工作面试时经常 笔试 要考的题目. using System; using System.Collections.Generic ...
- java冒泡排序详解
冒泡排序 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始 ...
- php冒泡排序详解笔记
冒泡 /* * 冒泡排序(从小到大) * 介绍: * 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来. * 思路: * 比较相邻的元素.如果第一个比第二个大,就交换他 ...
- JS 冒泡排序详解
冒泡排序原理:比较相邻两个数的大小,如果第一个数大于第二个数,那么交换位置,从第一位数开始,对后面每一对相邻的数据进行同样的比较和交换,直到最后没有任何一位需要进行比较大小和交换: 思路演算: arr ...
- C#冒泡排序--详解
思路:以数组int[]a={55,42,15,3,66,52};为例. 每一轮排序都把最大的数放在最后 所以, 对应循环语句思路 这样就很清晰了. 代码如下: , , , , , , , }; ; i ...
- JS-排序详解:冒泡排序、选择排序和快速排序
JS-排序详解-冒泡排序 说明 时间复杂度指的是一个算法执行所耗费的时间 空间复杂度指运行完一个程序所需内存的大小 稳定指,如果a=b,a在b的前面,排序后a仍然在b的前面 不稳定指,如果a=b,a在 ...
- C#委托详解(3):委托的实现方式大全(续)
接上篇(C#委托详解(2):实现方式大全),本篇继续介绍委托的实现方式. 4.Action<T>和Func<T>委托 使用委托时,除了为每个参数和返回类型定义一个新委托类型之外 ...
- 20160206.CCPP体系详解(0016天)
代码片段(01):.指针.c+02.间接赋值.c 内容概要:内存 ///01.指针 #include <stdio.h> #include <stdlib.h> //01.取地 ...
- 20160203.CCPP体系详解(0013天)
程序片段(01):数组.c+02.数组初始化语法.c 内容概要:数组 ///01.数组.c #include <stdio.h> #include <stdlib.h> //0 ...
- 《招一个靠谱的移动开发》iOS面试题及详解(上篇)
以下问题主要用于技术的总结与回顾 主要问题总结 单例的写法.在单利中创建数组应该注意些什么. NSString 的时候用copy和strong的区别. 多线程.特别是NSOperation 和 GCD ...
随机推荐
- rh358 004 bind反向,转发,主从,各种资源记录 unbound ansible部署bind unbound
通过bind实现正向,反向,转发,主从,各种资源记录 7> 部署反向解析 从ip解析到fqdn vim /etc/named.conf zone "250.25.172.in-addr ...
- PostgreSQL 与 Oracle 访问分区表执行计划差异
熟悉Oracle 的DBA都知道,Oracle 访问分区表时,对于没有提供分区条件的,也就是在无法使用分区剪枝情况下,优化器会根据全局的统计信息制定执行计划,该执行计划针对所有分区适用.在分析利弊之前 ...
- android 逆向 smali手写helloworld
编写Hello.smali文件 .class public LHelloWorld; .super Ljava/lang/Object; .method public static main([Lja ...
- HDFS 分布式环境搭建
HDFS 分布式环境搭建 作者:Grey 原文地址: 博客园:HDFS 分布式环境搭建 CSDN:HDFS 分布式环境搭建 准备四个Linux实例 每个实例对应的 host 和 ip 地址如下 nod ...
- 【读书笔记】C#高级编程 第二十五章 事务处理
(一)简介 事务的主要特征是,任务要么全部完成,要么都不完成. (二)概述 事务由事务管理器来管理和协调.每个影响事务结果的资源都由一个资源管理器来管理.事务管理器与资源管理器通信,以定义事务的结果. ...
- Typora自动上传超级详细教程!!
第一步检查环境变量 打开cmd 查看以下环境变量 需要软件: Typora PicGo gitee账号 配置node 配置git 第二步创建gitee仓库 设置仓库名直接创建,因为这里不能直接修改开源 ...
- 数仓Hive和分布式计算引擎Spark多整合方式实战和调优方向
@ 目录 概述 Spark on Hive Hive on Spark 概述 编译Spark源码 配置 调优思路 编程方向 分组聚合优化 join优化 数据倾斜 任务并行度 小文件合并 CBO 谓词下 ...
- Redux(mvc、flux、react-redux)
其他章节请看: react实战 系列 Redux 关于状态管理,在 Vue 中我们已经使用过 Vuex,在 spug 项目中我们使用了 mobx,接下来我们学习 Redux. 本篇以较为易懂的方式讲解 ...
- keycloak~资源的远程授权
17.1远程资源授权准备 17.1.1认证和访问流程图 参考:http://www.zyiz.net/tech/detail-141309.html 17.1.2为用户指定角色 可以使用ROLE_US ...
- JUC在深入面试题——三种方式实现线程等待和唤醒(wait/notify,await/signal,LockSupport的park/unpark)
一.前言 在多线程的场景下,我们会经常使用加锁,来保证线程安全.如果锁用的不好,就会陷入死锁,我们以前可以使用Object的wait/notify来解决死锁问题.也可以使用Condition的awai ...