冒泡排序

基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。
 即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
 第一次比较排序的结果:会把其中最大的数据排到最大的索引处
 第二次比较排序后的结果:因为第一次已经把最大的一个数据放到了最大的索引的地方,所以这次要进行比较的数据比数组里面的元素的数据个数-1个,而第二大的数据也会排到第二大的索引处
    第三次比较排序的结果:跟第二次差不多,只是这次要进行比较的数据比数组里面的元素的数据个数还少了2个,
    第四次:少3个...
  综上所述,要使数组里面的数据按照从小到大排序,总的比较的次数会比数组的长度-1次,而随着比较的次数的增加,每次要进行比较的数据依次减少。

public class Demo4 {public static void main(String[] args) {int number[]={49,38,65,97,76,13,27,14,10};for(int i=0;i<number.length-1;i++){for(int j=0;j<number.length-1-i;j++){if(number[j]>number[j+1]){int tmp=number[j];number[j]=number[j+1];number[j+1]=tmp;}}for (int j = 0; j < number.length; j++) {System.out.print(number[j]+"\t");}System.out.println("排序"+(i+1)+"次后的结果");}}}

选择排序

基本方法:
从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处,第二次找到第二小的值。
具体是如何实现呢?
首先第一轮是0索引上的数据依次跟后面各个索引上的数据进行比较,直到遇到一个比它小的数据,这时候,这个小的数据就替换掉0索引上原来的数据,接着这个替换掉的数据继续跟它原来的索引位置的后面的索引上的数据进行比较也就是说,进行完第一轮后,0索引上的数据肯定是这个数组上最小的数据
第二轮接着就是1索引上的数据来跟后面的数据进行比较,这个时候参与比较的数据比原来少了一个
第三轮又会少一个,这样循环一轮j的值就会+1,也就是j开始的索引下标+1。

public class Demo5 {public static void main(String[] args) {int number[]={49,38,65,97,76,13,27,14,10};for(int i=0;i<number.length;i++){for(int j=i+1;j<number.length;j++){if(number[i]>number[j]){int tmp=number[i];number[i]=number[j];number[j]=tmp;}}for (int j = 0; j < number.length; j++) {System.out.print(number[j]+"\t");}System.out.println("第"+(i+1)+"次排序后的结果");}}}

插入排序

插入排序就是把当前待排序的元素插入到一个已经排好序的列表里面。 一个非常形象的例子就是右手抓取一张扑克牌,并把它插入左手拿着的排好序的扑克里面。
 插入排序的最坏运行时间是O(n2), 所以并不是最优的排序算法。
 如果输入数组已经是排好序的话,插入排序出现最佳情况,其运行时间是输入规模的一个线性函数。
 如果输入数组是逆序排列的,将出现最坏情况。平均情况与最坏情况一样,其时间代价是Θ(n2)

public class Demo6 {public static void main(String[] args) { //定义一个整型数组 int[] nums = new int[]{4,3,-1,9,2,1,8,0,6}; //打印没有进行排序的数组 System.out.println("没有排序之前的结果:" + Arrays.toString(nums)); for(int index=0; index<nums.length; index++) { //获得需要插入的数值 int key = nums[index]; //取得下标值 int position = index; //循环比较之前排序好的数据,找到合适的地方插入 while(position >0 && nums[position-1] > key) { nums[position] = nums[position-1]; position--; } nums[position] = key; } //打印排序后的结果 System.out.println("排序后的结果:" + Arrays.toString(nums)); } }

Java冒泡,选择,插入排序算法相关推荐

  1. php三个数字比较大小排序,php中常用的4种实现数字大小排序的冒泡选择等算法函数代码...

    分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中按照从小到大的顺序进行排序. 本站收录这篇文章php中常用的4种实现数字大小排序的冒泡选择等算法函数代码,详细解说文章中相关排序 冒泡 ...

  2. Java | 用Java实现选择排序算法(记录写程序全过程的编程哲学)

    最近听了马士兵老师的java算法课,感觉这不错,我很欣赏其中的编程哲学. 一.编程哲学 有简单到复杂 1.1 验证一步走一步 1.2 多打印中间结果 先局部后整体 先粗糙后精细 3.1 变量更名 3. ...

  3. JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...

  4. 插入排序算法(Java代码实现)

    其它经典排序算法:https://blog.csdn.net/weixin_43304253/article/details/121209905 插入排序算法: 思路:将数据分为已经排序好的数据和未排 ...

  5. python sort 部分元素_Python 简单排序算法-选择、冒泡、插入排序实现

    写文章主要是记录自己每天学习的东西,本篇文章主要介绍数据结构中常用的简单的排序算法,虽然这些算法用Python实现起来不是十分的高效,不如c.java之类的运行速度快,应用Python实现主要是为了: ...

  6. 回炉篇5—数据结构(4)之冒泡、选择、插入排序算法

    冒泡.选择.插入排序算法 排序大家都很熟了,很古老的算法,古老才有必要回炉再看一遍,经典才值得研究. 1.冒泡排序 从字面意思理解,水泡从水底冒出到水面的过程中,由小慢慢大,最后大泡泡冒出水面,了解这 ...

  7. c#冒泡、快速、选择和插入排序算法的项目应用

    在之前的一篇文章里,我们简单地实现了对一维数组的四种排序算法,但是在实际的项目中,我们排序的方式可能(几乎是一定)不止仅仅按照数字排序.我们常常按照合适的需要的排序方式进行排序,比如航班信息可能按时间 ...

  8. 简单选择排序_一文带你读懂排序算法(一):冒泡 amp; 快速选择排序 amp; 简单插入排序算法...

    点击上方「蓝字」关注我们 排序是确保数据规则有序的有效手段.日常开发里,我们常用到的是"冒泡"."插入排序"."选择排序"三种.大部分情况下 ...

  9. java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序...

    算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...

  10. 冒泡、选择、插入排序算法

    1.冒泡排序: ①.比较相邻的元素.如果第一个比第二个大,就交换他们两个. ②.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数(也就是第一波冒泡完成). ...

最新文章

  1. MySQL安装及root密码初始化
  2. Android LayoutInflater详解
  3. uni-app 使用vue的语法+小程序的标签和API。
  4. LUA GC 简单测试
  5. 台达变频器vfb—d参数表_台达变频器在印刷涂布机上的应用
  6. 浅谈数据中的偏差问题和推荐系统去偏最新研究进展
  7. 摩根斯坦利面试题库_经验 | 金融公司摩根士丹利从笔试到实习的全程经验
  8. [译】Redux入门教程(一)
  9. Codeforces Beta Round #8 C. Looking for Order 状压dp
  10. 从零开始学Pytorch(十五)之数据增强
  11. 如何学习Python进行数据分析
  12. sublime text3怎么运行python代码_sublime text3 怎么配置、运行python
  13. html5 序列帧播放器,Pdplayer 64位版(序列帧动画播放器)V1.0.7.33 免费版
  14. 睡眠阶段分期——SVM和ELM分别与粒子群算法结合(function)
  15. 51单片机学习笔记——串口通信
  16. 寒假每日一题——贝茜放慢脚步
  17. 目标检测: 一文读懂 CenterNet (CVPR 2019)
  18. 别忽悠我,征信真的有黑名单吗?
  19. ME2188A33M3G 高效、同步的PFM升压直流-直流转换器
  20. android点击按钮打开相册,打开相机的代码

热门文章

  1. 程序员放弃阿里60w年薪,选到手5k的公务员,坚信公务员后期完胜程序员
  2. Jmeter MD5加密及其运用
  3. nodejs 快速发布rtsp server
  4. websocket协议中获取 http 请求字符串
  5. mybatisplus查询今天的数据_springboot集成mybatisPlus
  6. 【Arthas】Arthas 类查找和反编译原理
  7. 【clickhouse】阿里clickhouse 随便查询一条数据都报错 read time out
  8. 95-910-165-源码-FlinkSQL-Flink SQL 中的时间属性
  9. 95-30-010-Channel-AbstractChannel
  10. 【Elasticsearch】不常用 length filer、ngram filter、trim filter、truncate filter、unique filter、synonym token