java数组三种排序方式

  • 一、冒泡排序
  • 二、插入排序:
  • 三、选择排序
  • 三种算法排序的稳定性分析

一、冒泡排序

动图演示:

在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

排序思路:
第一步:将倒数第一个和倒数第二个数进行比较,如果小,则互换;
第二步:将倒数第二个和倒数第三个数进行比较,如果小,则互换;

第N步:筛选出最小的一个数,然后从剩下的数中按照上面的方法反复操作,得到需要的序列。

代码实现

import java.util.Arrays;public class TestDemo {public static void main(String[] args) {int [] array = {7,14,3,22,1,6,15,60,5};for (int i = 0; i < array.length-1; i++) { //控制循环次数,比长度少一次。for (int j = 0; j < array.length-i-1; j++) { //后面排好的值不需要进行比较,所以减去i。if(array[j]>array[j+1]) {int temp = array[j];array[j] = array[j+1];array[j+1] = temp;}}}System.out.println(Arrays.toString(array));}
}

测试结果

二、插入排序:

动图演示:

在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

例:六个数12 15 9 20 6 31 24 用直接插入排序,如下图:

思路:

第一步:从给出的六个数中,随便拿出一个数,比如12,形成一个有序的数据序列(一个数当然是有序的数据序列了,不看12之外的数,就当其他的数不存在);
第二步:从剩下的五个数中挑出一个数来,比如15,和刚才的12作比较,12<15,因此,放在12后面,形成数据序列12 15;
第三步:从剩下的四个数中挑出一个数来,比如9,和刚才的有序数据序列12 15作比较,9 < 12 < 15,因此,放在最前面,形成数据序列9 12 15;

第N步,经过这样一个一个的插入并对比,就形成了上图所示的排序结果。在一个元素插入时,首先要和数据序列中最大的元素作比较,如果遇到相同的,则放在相同元素的后面。

代码实现

public class TestDemo {public static void main(String[] args) {int [] array = {7,14,3,22,1,6,15,60,5};int temp=0;for(int i=1;i<array.length;i++){int j=i-1;temp=array[i];for(;j>=0&&temp<array[j];j--){array[j+1]=array[j];//将大于temp的值整体后移一个单位   }array[j+1]=temp;}System.out.println(Arrays.toString(array));}
}

测试结果

三、选择排序

动图演示:

在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

思路:

第一步:从四个数找到最小的,和初始状态排在第一位的移动互换;
第二步:从剩下三个数中找到最小的,和初始状态排在第二位的移动互换;

第N步:重复上述查找最小和互换的步骤,直到最后一个为止。

代码实现

public class TestDemo {public static void main(String[] args) {int [] array = {7,14,3,22,1,6,15,60,5};for (int i = 0; i < array.length-1; i++) { //i为要比较的元素。for (int j = i+1; j < array.length; j++) { //i后的每一次元素。if(array[i]>array[j]) //两者比较,将较小值放在前面位置。{int temp = array[i];array[i] = array[j];array[j] = temp;}}}System.out.println(Arrays.toString(array));}
}

测试结果

三种算法排序的稳定性分析

  1. 直接插入排序:一般插入排序,比较是从有序序列的最后一个元素开始,如果比它大则直接插入在其后面,否则一直往前比。如果找到一个和插入元素相等的,那么就插入到这个相等元素的后面。插入排序是稳定的。
  2. 选择排序:在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。光说可能有点模糊,来看个小实例:858410,第一遍扫描,第1个元素8会和4交换,那么原序列中2个8的相对前后顺序和原序列不一致了,所以选择排序不稳定。
  3. 冒泡排序:由前面的内容可知,冒泡排序是相邻的两个元素比较,交换也发生在这两个元素之间,如果两个元素相等,不用交换。所以冒泡排序稳定。

部分内容转载自: https://blog.csdn.net/zwqjoy1.

java数组三种排序方式相关推荐

  1. Java数组—三种创建方式与区别

    Java创建数组有三种方式 1. 第一种方式 int arr [ ]  = new int [5] ; 属于动态创建,声明并创建内存空间,等待赋值. //创建数组的第一种方式 //属于动态创建,声明并 ...

  2. Java数组三种输出方式

    1.模仿Arrays.toString()方法 Array.toString输出内容为  [a1, a2, a3,...] 最外一层中括号[ ],每个元素后有逗号,逗号后跟一空格,最后一个元素后无逗号 ...

  3. SQLaichemy三种排序方式

    一.介绍 SQLALchemy也是一个python的ORM框架,django内部的ORM框架只适用于django,而SQLALchemy适用于所有python的web框架 SQLAlchemy是一个基 ...

  4. java 数组和List排序方式汇总

    前言 在工作中使用java, 需要存储一列数据时,脑子里只剩下List一种数据类型了--因为工作场景,很多时候数据个数是位置的,那为了不会有数据溢出或是节省存储空间,List类型是最方便的. 然而,刷 ...

  5. java线程三种创建方式与线程池的应用

    前言:多线程下程序运行的结果是随机的,以下案例代码的运行结果仅供参考 一 通过继承Thread线程创建的方法与执行的步骤 /* 1 继承Thread 2重写run方法 3创建线程继承类的子类 4 调用 ...

  6. Java中三种代理方式—— 静态代理与两种动态代理的实现机制

    个人博客请访问 http://www.x0100.top 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现 ...

  7. php根据下标倒序排,PHP的三种排序方式

    数组排序 排序基础 大约有几十种方法的排序: php中,排序相当简单:一个函数搞定! 比如: $arr5 = array( 12, 'aa'=>8, 6=>10,'bb'=> 3, ...

  8. php爱奇艺筛选标签,三种排序 快速筛选好视频_软件资讯技巧应用-中关村在线

    使用在线视频播放器来观看视频,通常有可以分为有目标和无目标两种.即是用户如果定点找一部视频和随意查看喜欢的视频,这两种模式往往查找视频的方法也是不一样的.我们这里要和大家讲解的是,用户在没有目标视频的 ...

  9. Java基础知识 21(Set集合,HashSet集合以及它的三种遍历方式(迭代器,增强for循环,forEach),LinkedHashSet集合,TreeSet集合(自然排序法,比较器排序法))

    Java基础知识 21 Set集合 Set集合:一个不包含重复元素的Collection集合,元素不重复,List集合是允许元素重复的. Set接口的三个字类:HashSet(),LinkedHash ...

  10. java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...

    java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...

最新文章

  1. python求最值_用Python实现最速下降法求极值的方法
  2. C++_泛型编程与标准库(三)
  3. 交叉表的简单实现2:使用前端程序实现
  4. 三星q90r如何升级系统_看尚电视强制升级风行系统,如何安装第三方软件?
  5. html5+shim脚本,HTML5探秘:用requestAnimationFrame优化Web动画
  6. mysql 事务回滚_SQL基础丨事务处理
  7. 字段缺失_数据科学| 手把手教你用 pandas 索引、汇总、处理缺失数据
  8. 【MATLAB】饼图
  9. 安卓一个页面设置另一个页面的文本样式_H1标签对于SEO有多重要?页面要不要用H1标签呢?...
  10. [渝粤教育] 中国地质大学 管理信息系统 复习题 (2)
  11. 字符串 hash 唯一数字_物联网安全:基于Hash的RFID安全认证协议
  12. 对c语言课程的收获,c语言课程设计心得体会精选.doc
  13. 手机测试移动网速的软件,移动测试网速(中国移动在线测速)
  14. 计算机为什么要设置用户账号密码,电脑用户名是什么意思(怎么修改及设置用户名)...
  15. 19841227同生缘
  16. oracle官网(中文)
  17. 最新算法只需一块GPU,就能算出蛋白质结构
  18. 【过关斩将】面试官:小伙子你都有哪些业余爱好?
  19. 联想u盘启动linux,联想thinkpad e335台式机bios设置u盘启动的方法
  20. 穿过时光隧道去看TNF100十周年,这次天猫Club如何跑出新生活方式?

热门文章

  1. [Java反序列化]AspectJWeaver反序列化
  2. Labview 中AniGIF控件及注册方法
  3. 自动量程万用表的实现原理_电子元器件用指针万用表、数字万用表、自动量程万用表测量原理图解大全教会您怎么看与测的呢?...
  4. 算法分析与设计实验报告——0-1背包问题的动态规划算法实现
  5. 刷新计算机dns缓存的命令,Windows系统刷新DNS缓存命令是什么?Win7系统清除DNS缓存方法...
  6. android 斜线 绘制_Android绘图:绘制直线的 drawLine方法
  7. 完美世界服务器维护多久,完美世界服务端启动和维护
  8. 山东大学软件学院计算机组成原理课程设计整机实验(3)
  9. 软件测试——集成测试篇
  10. js分割字符串的方法