JAVA冒泡排序算法(含详细过程代码讲解及优化)
冒泡排序算法拆分讲解及优化
- java冒泡排序
- 一、代码的拆分讲解
- 从上面步骤,可以观察到每次的j都相对于前一趟进行-1操作,所以可以把这些操作套在一个for循环里来控制j即可。
- 二、冒泡排序的代码
- 优化的目的:数组有可能在中间某一过程就已经有序,无序再进行后面操作。
java冒泡排序
以3,9,-1,10,-2这组数为例,对这组数使用冒牌排序使其有序
一、代码的拆分讲解
首先创建一个数组和一个用于三角交换的变量
int arr[] = {3,9,-1,10,-2};
int temp = 0;
首先进行第一趟
//第一趟排序,就是将最大的数排在最后for (int j = 0; j < arr.length - 1; j++) {if (arr[j] > arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}
第一趟的运行后的数组
然后第二趟
//第一趟排序,就是将最大的数排在最后for (int j = 0; j < arr.length - 1-1; j++) {if (arr[j] > arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}
第二趟的运行后的数组
第三趟
//第一趟排序,就是将最大的数排在最后for (int j = 0; j < arr.length - 1 -2; j++) {if (arr[j] > arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}
第三趟的运行后的数组
第四趟
//第一趟排序,就是将最大的数排在最后for (int j = 0; j < arr.length - 1 -3; j++) {if (arr[j] > arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}
第四趟的运行后的数组
下面是四趟代码的结果汇总:
从上面步骤,可以观察到每次的j都相对于前一趟进行-1操作,所以可以把这些操作套在一个for循环里来控制j即可。
二、冒泡排序的代码
下面为冒泡排序的代码,并把它写入bubblesSort方法里:
普通冒泡排序:
public static void bubbleSort(int[] arr){//冒泡排序的时间复杂度为O(n*n)int temp = 0;//临时变量for (int j = 0; j < arr.length - 1; j++) {for (int i = 0; i < arr.length-1 -j ; i++) {if (arr[i] > arr[i+1]){//三角交换temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}}}
优化的目的:数组有可能在中间某一过程就已经有序,无序再进行后面操作。
优化冒泡排序:
public static void bubbleSort(int[] arr){//冒泡排序的时间复杂度为O(n*n)int temp = 0;//临时变量boolean flag = false;//用于优化冒泡排序,判断是否进行过交换for (int j = 0; j < arr.length - 1; j++) {for (int i = 0; i < arr.length-1 -j ; i++) {if (arr[i] > arr[i+1]){//三角交换temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;flag = true;}}//如果没有进入三角交换则证明数组已经有序,直接退出循环即可//如果进入了三角交换,把flag赋值为false,来判断下一次循环是否进入三角交换if (flag == false){break;}else {flag = false;}}}
JAVA冒泡排序算法(含详细过程代码讲解及优化)相关推荐
- Go语言_数据结构_栈(包括入栈和出栈,表达式的入栈出栈详细过程代码实现)
入栈和出栈代码实现如下: package main import ("fmt""errors" )//使用数组来模拟一个栈的使用 type Stack stru ...
- Python实现二分查找算法,图片结合代码讲解,简单易懂
Python实现二分查找算法,图片结合代码讲解,简单易懂 二分查找是指在一个数组中循环找到特定的目标元素的一种算法,二分查找算法要求这个数组必须是有序的,如果不是有序则最后得出的结果是不准确的,因为其 ...
- java冒泡排序算法代码降序_java实现冒泡排序算法
介绍 冒泡排序是一种算法,比较相邻元素,如果他们处在错误的位置上,那么交换他们的位置.排序可以进行升序或者降序. 原理 从第一个元素开始,比较第一个元素和第二个元素,如果第一个元素大于第二个元素,那么 ...
- 数据结构之冒泡排序算法(图解+分析+代码调优)
文章目录 一.冒泡排序的介绍 二.图示冒泡排序全过程 三.冒泡排序图示小结 四.Java代码实现冒泡排序(优化前) 五.优化方法 六.Java代码实现冒泡排序(优化后) 七.测试冒泡排序是否正确 八. ...
- Java冒泡排序算法以及算法优化,这篇足矣……
前言 作为Java程序员,简单的算法,必须要掌握的.尤其初级开发人员在面试过程或者笔试都会有相应算法题,今天我们讲解冒泡排序算法是如何实现的以及优化方法. 何为冒泡排序 冒泡排序的基本思路:通过对待排 ...
- python 冒泡排序算法(超级详细)
一.什么是冒泡排序 冒泡排序是一种简单的排序算法,它也是一种稳定排序算法.其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换.一直重复这个过程,直到没有任何两个相邻 ...
- java 冒泡排序算法优化
1.冒泡排序优化思想 在文章<JAVA实现冒泡排序算法>中,我们用常规算法实现了冒泡排序,在此篇中,我们对冒泡排序算法进行优化,思想如下:引入一个标志位,默认为true,如果本次或者本趟遍 ...
- java冒泡排序算法代码降序_冒泡排序(起泡排序)算法及其C语言实现
起泡排序,别名"冒泡排序",该算法的核心思想是将无序表中的所有记录,通过两两比较关键字,得出升序序列或者降序序列. 例如,对无序表{49,38,65,97,76,13,27,49} ...
- Java线程同步(含详细解释/代码实例)
一.为解决线程安全问题,Java引入监视器(monitor)来保证共享数据的同步性.任何对象都可作为一个监视器,关键词synchronized修饰某个对象后,该对象就成为监视器. 二.同步代码块只能有 ...
最新文章
- php windows 编译,Windows编译PHP7.2拓展
- 数据库和缓存的双写一致性问题
- json解析数组 nlohmann_JSON 数组的遍历解析
- Django-Model中的ForeignKey,ManyToManyField与OneToOneField
- 如何查看某个用户指定时间段的ABAP开发记录
- Knative 核心概念介绍:Build、Serving 和 Eventing 三大核心组件
- 背景图片适应屏幕百分百
- 开发者账号申请 真机调试 应用发布
- LeetCode算法入门- Merge Two Sorted Lists -day15
- html标签学习日记之(表格table)
- 通过利用“业务映射”来构建敏捷组织
- 用计算机上发微博,电脑版新浪微博怎么使用?新浪微博基本使用方法介绍
- wap精武堂源码php_精武堂怎么学技能更牛?
- 同步回调与异步回调区别
- taro更新页面数据_taroRefresh
- [转载]Win7微软官方正式版原版镜像下载总汇(附win7 OEM KEY密钥)
- Fullcalendar 在vue中鼠标hover显示悬浮框(tippy.js插件)
- 漏洞修复:Insecure Transport: HSTS not Set
- vue前端实现微信支付-微信公众号JSSDK
- [Deeplearning]对比散度算法(CD算法)
热门文章
- [Erlang 0057] Erlang 排错利器: Erlang Crash Dump Viewer
- c语言输入一个十六进制,C语言:编写一函数,输入一个十六进制数,输出一个对应的十进制数。...
- Python中常见的数据类型
- NodeJS 响应式故宫文化宣传网站计算机毕设源码61557
- python3中的format函数
- xingtai -究极炸弹
- pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed o
- Autojs4.1.0实战教程---快手极速版领取专属
- [数据结构]最小生成树
- C++动态库调用宿主进程中的对象方法《纯虚函数的使用》