冒泡排序算法拆分讲解及优化

  • 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冒泡排序算法(含详细过程代码讲解及优化)相关推荐

  1. Go语言_数据结构_栈(包括入栈和出栈,表达式的入栈出栈详细过程代码实现)

    入栈和出栈代码实现如下: package main import ("fmt""errors" )//使用数组来模拟一个栈的使用 type Stack stru ...

  2. Python实现二分查找算法,图片结合代码讲解,简单易懂

    Python实现二分查找算法,图片结合代码讲解,简单易懂 二分查找是指在一个数组中循环找到特定的目标元素的一种算法,二分查找算法要求这个数组必须是有序的,如果不是有序则最后得出的结果是不准确的,因为其 ...

  3. java冒泡排序算法代码降序_java实现冒泡排序算法

    介绍 冒泡排序是一种算法,比较相邻元素,如果他们处在错误的位置上,那么交换他们的位置.排序可以进行升序或者降序. 原理 从第一个元素开始,比较第一个元素和第二个元素,如果第一个元素大于第二个元素,那么 ...

  4. 数据结构之冒泡排序算法(图解+分析+代码调优)

    文章目录 一.冒泡排序的介绍 二.图示冒泡排序全过程 三.冒泡排序图示小结 四.Java代码实现冒泡排序(优化前) 五.优化方法 六.Java代码实现冒泡排序(优化后) 七.测试冒泡排序是否正确 八. ...

  5. Java冒泡排序算法以及算法优化,这篇足矣……

    前言 作为Java程序员,简单的算法,必须要掌握的.尤其初级开发人员在面试过程或者笔试都会有相应算法题,今天我们讲解冒泡排序算法是如何实现的以及优化方法. 何为冒泡排序 冒泡排序的基本思路:通过对待排 ...

  6. python 冒泡排序算法(超级详细)

    一.什么是冒泡排序 冒泡排序是一种简单的排序算法,它也是一种稳定排序算法.其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换.一直重复这个过程,直到没有任何两个相邻 ...

  7. java 冒泡排序算法优化

    1.冒泡排序优化思想 在文章<JAVA实现冒泡排序算法>中,我们用常规算法实现了冒泡排序,在此篇中,我们对冒泡排序算法进行优化,思想如下:引入一个标志位,默认为true,如果本次或者本趟遍 ...

  8. java冒泡排序算法代码降序_冒泡排序(起泡排序)算法及其C语言实现

    起泡排序,别名"冒泡排序",该算法的核心思想是将无序表中的所有记录,通过两两比较关键字,得出升序序列或者降序序列. 例如,对无序表{49,38,65,97,76,13,27,49} ...

  9. Java线程同步(含详细解释/代码实例)

    一.为解决线程安全问题,Java引入监视器(monitor)来保证共享数据的同步性.任何对象都可作为一个监视器,关键词synchronized修饰某个对象后,该对象就成为监视器. 二.同步代码块只能有 ...

最新文章

  1. php windows 编译,Windows编译PHP7.2拓展
  2. 数据库和缓存的双写一致性问题
  3. json解析数组 nlohmann_JSON 数组的遍历解析
  4. Django-Model中的ForeignKey,ManyToManyField与OneToOneField
  5. 如何查看某个用户指定时间段的ABAP开发记录
  6. Knative 核心概念介绍:Build、Serving 和 Eventing 三大核心组件
  7. 背景图片适应屏幕百分百
  8. 开发者账号申请 真机调试 应用发布
  9. LeetCode算法入门- Merge Two Sorted Lists -day15
  10. html标签学习日记之(表格table)
  11. 通过利用“业务映射”来构建敏捷组织
  12. 用计算机上发微博,电脑版新浪微博怎么使用?新浪微博基本使用方法介绍
  13. wap精武堂源码php_精武堂怎么学技能更牛?
  14. 同步回调与异步回调区别
  15. taro更新页面数据_taroRefresh
  16. [转载]Win7微软官方正式版原版镜像下载总汇(附win7 OEM KEY密钥)
  17. Fullcalendar 在vue中鼠标hover显示悬浮框(tippy.js插件)
  18. 漏洞修复:Insecure Transport: HSTS not Set
  19. vue前端实现微信支付-微信公众号JSSDK
  20. [Deeplearning]对比散度算法(CD算法)

热门文章

  1. [Erlang 0057] Erlang 排错利器: Erlang Crash Dump Viewer
  2. c语言输入一个十六进制,C语言:编写一函数,输入一个十六进制数,输出一个对应的十进制数。...
  3. Python中常见的数据类型
  4. NodeJS 响应式故宫文化宣传网站计算机毕设源码61557
  5. python3中的format函数
  6. xingtai -究极炸弹
  7. pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed o
  8. Autojs4.1.0实战教程---快手极速版领取专属
  9. [数据结构]最小生成树
  10. C++动态库调用宿主进程中的对象方法《纯虚函数的使用》