交换两坐标位置的swap()函数 之后要用到

public static void swap(int[] arr, int a, int b) {int temp;temp = arr[a];arr[a] = arr[b];arr[b] = temp;}

采用空瓶法。交换变量的三种方法 →点这里

冒泡排序

public static void bubbleSort(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - i - 1; j++) {if (arr[j] > arr[j + 1]) {swap(arr, j, j + 1);}}}}

将arr.length个数组中的元素按照由小到大排序:
1.从第一个元素(0号元素)开始,比较它(j)和他之后的元素(j+1)的大小并交换,将最大的元素放置在队尾。
2.重复执行1步骤(length - 1)次,每次都将剩余元素中最大的元素放置在剩余元素的队尾。
注意:
第一步执行次数为(length - 1 - j),表示“比较大小”的步骤仅发生在还没有进行过比较的剩余元素中。
外层循环(i循环)的循环次数不是数组长度,而是数组长度 - 1。因为元素两两比较大小只会发生(n - 1)次。类似五个手指头之间有四条手指缝。如果进行i次排序,程序会报错 java.lang.ArrayIndexOutOfBoundsException。

选择排序

public static void selectionSort(int[] arr) {int min = 0;int flag = -1;for (int i = 0; i < arr.length; i++) {flag = i;min = arr[i];for (int j = i; j < arr.length; j++) {if (arr[j] < min) {min = arr[j];flag = j;}}swap(arr, flag, i);}}

将arr.length个数组中的元素按照由小到大排序:
1.找出length个元素其中最小的数并放在数组的第一个位置(0号位)
2.执行length次1步骤。每次都将剩余元素中最小的数放在剩余元素的第一位。
注意:
每次将剩余元素的第一个元素设定为最小值min,如果之后遇到比第一位更小的元素,则替换最小值,记忆此元素的位置,再继续比较。
每次比较将从上一次比较完成的元素的下一位开始,到队尾结束。

插入排序:
这里提供两种写法

public static void insertSort(int[] arr) {for (int i = 1; i < arr.length; i++) {for (int j = i; j > 0 && arr[j] < arr[j - 1]; j--) {swap(arr, j, j - 1);}}}

将arr.length个数组中的元素按照由小到大排序:
插入排序的理解可以类比扑克牌的摸牌阶段(来自我的一位学长)。按照元素在数组中的顺序,先抽取第一个元素捏在手中,再抽取第二个元素即第二张牌,如果第二张牌比第一张牌小,则把第二张插入在第一张牌的前面,如果不比第一张牌小(>或=),则放在第一张牌后面;继续抽取第三张牌,与第二张进行比较,如果比第二张小,则插入在第二张牌的前面,接着比较第三张与第一张牌的大小,如果第三张比第一张小,则插入在第一张前面,如果不比第一张牌小(>或=),则停止继续向前比较;继续抽取第四张牌,依次和前一张牌比较……直到成为第一张牌或不比前一张牌小(>或=)……以此类推。
注意:
插入排序和冒泡排序的不同之处在于:插入排序只要遇到当前元素和它的前一个元素不满足交换的条件(>或<),就立即退出循环(体现在代码 && arr[j] < arr[j - 1] 的判断上),因为之前的数已经排好顺序。而冒泡排序需要两两相互验证条件,每轮挑出剩余元素中最大或最小的那一个。
第二种写法:

     public static void insertSort(int[] arr) {for (int i = 1; i < arr.length; i++) {for (int j = 0; j < i && arr[i - j] < arr[i - j - 1]; j++) {swap(arr, i - j, i - j - 1);}}}

如有错误或有更好的改进意见,欢迎批评指正!

java 冒泡排序 选择排序 插入排序及其异同点相关推荐

  1. c语言数组项目按身高排序,过三关 Java冒泡排序选择排序插入排序小练习

    材料:猴子排序,按照身高来从小到大来排序. 第一关: 老猴子带领小猴子队伍按大小逐一比较,交换,开始高矮排列队伍.(冒泡排序) 第二关: 太慢了,给第一关增加难度,进行选择排序 第三关: 最后,尝试选 ...

  2. 过三关 Java冒泡排序选择排序插入排序小练习

    材料:猴子排序,按照身高来从小到大来排序. 第一关: 老猴子带领小猴子队伍按大小逐一比较,交换,开始高矮排列队伍.(冒泡排序) 第二关: 太慢了,给第一关增加难度,进行选择排序 第三关: 最后,尝试选 ...

  3. 【排序算法】冒泡排序|选择排序|插入排序|希尔排序

    文章目录 冒泡排序 选择排序 插入排序 希尔排序 冒泡排序   第一个元素开始向第二个元素比较,若大于则交换位置,不大于则不动.然后第二个元素和第三个元素比较,再然后第三个元素和第四个元素比较-一直比 ...

  4. 冒泡排序选择排序插入排序

    目录 冒泡排序 选择排序 插入排序 冒泡排序 冒泡排序(最好是O(n), 最坏O(n2)) 原理: 拿自己与上面一个比较,如果上面一个比自己小就将自己和上面一个调换位置,依次再与上面一个比较,第一轮结 ...

  5. 十大经典排序算法详解(一)冒泡排序,选择排序,插入排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 ...

  6. java冒泡排序函数验证_java冒泡排序-选择排序-插入排序-使用API中文文档直接调用函数...

    import java.util.Arrays; public class ArrayDemo2_3 { public static void main(String []args) { //---- ...

  7. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

  8. 【排序算法】冒泡排序 选择排序 插入排序 希尔排序(数组)

    冒泡排序 #include<iostream> using namespace std; #define SWAP(a,b) {int tmp;tmp=a;a=b;b=tmp;} int ...

  9. 02_Python算法+数据结构笔记-冒泡排序-选择排序-插入排序-快排-二叉树

    b站视频:路飞IT学城 清华计算机博士带你学习Python算法+数据结构_哔哩哔哩_bilibili 文章目录 #11 排序介绍 #12 冒泡排序介绍 #13 冒泡排序 #14 选择排序 #15 插入 ...

最新文章

  1. javascript 回调函数
  2. 智源社区AI周刊·第二期:过去一周AI领域的新鲜事
  3. Huawei交换机配置两台交换机堆叠示例
  4. 使用NPOI时ICSharpCode.SharpZipLib版本冲突问题解决
  5. 利用JS实现复制/粘贴功能
  6. truncate、rename函数的使用
  7. 关于垂直切分Vertical Sharding的粒度
  8. CentOS 6 上安装 pip、setuptools
  9. 开发工具Charles for Mac(信息抓取) v4.6.3b1
  10. volte的sip信令流程_VOLTE-SIP完整信令解析
  11. extmail mysql数据库 重启_Extmail邮件服务器部署
  12. 腾讯视频TS文件转MP4
  13. PayPal美元提现到国内银行卡教程!
  14. linux常用命令大全,建议收藏
  15. 服务器ping值不稳定,服务器网络ping值过高的原因
  16. 我国的社保到底是多交好,还是少交好?
  17. WPS怎么统计相同名称的数据_教你如何将垃圾的WPS,玩得高大上!
  18. NB-IOT电信云北向开发,电信天翼物联网平台对接应用服务
  19. 实现用户在网页中给我的QQ邮箱发邮件
  20. 兄弟Brother PJ-763MF 驱动

热门文章

  1. 安装skip-thoughts提取句子特征
  2. java常量声明_java常量的声明使用定义等
  3. 读取文件名,写入execl
  4. intel i5 CPU和i7 cpu有什么不同之处 购买的时候应该怎么选择
  5. 什么是Python的 “内存管理机制”
  6. 输入自动提示——《超级处理器》应用
  7. 如何检测远程服务器端口是否打开,如何远程查看服务器端口是否打开
  8. python设置文件名长度对齐
  9. vue中使用图像编辑器tui-image-editor(二)——应用示例
  10. 2021-07-31-DJ-007 Django 模型,自定义模型管理器Manager,自定义字段验证器Validdator