冒泡排序、选择排序和插入排序代码如下:

package cn.luxh.app.test;public class SimpleSortUtil {/*** 冒泡排序* 从小到大排序* 思路:* 1)第一趟排序进行了len-1次比较,数组中的最大值元素排到了最末端,位置已固定,该元素不再参与下趟比较* 2)第二趟排序进行了len-2次比较,因为只需要比较到第一个位置固定的元素(第一趟排序中的最大值元素)即可,数组中的第二大值元素位置也已固定,该元素不再参与下趟比较* 3)第三趟排序进行了len-3次比较,因为只需要比较到第一个位置固定的元素(第二趟排序中的最大值元素)即可,数组中的第三大值元素位置也已固定,该元素不再参与下趟比较* 4)依次类推...* * @param array* @return*/public static int[] bubbleSort(int[] array) {int out;//外层循环计数int in;//内层循环计数int len = array.length;//1)外层for循环计数器out从数组的最后开始,即out等于len-1,每经过一次循环,out减1(往左移);//2)下标大于out的元素都是已经排好序的了;//3)内层for循环计数器in从数组的最开始算起,即in=0,每完成一次内部循环加1,当in等于out时结束一次循环。//4)在内层循环中,比较in和in+1的两个元素for(out=len-1;out>1;out--) {//下标大于out的元素都是已经排好序的,不用再处理。for(in=0;in<out;in++) {if(array[in]>array[in+1]) {//当前元素值比后面的元素值大,则交换两个元素的位置int temp = array[in];array[in] = array[in+1];array[in+1] = temp;}}}return array;}/*** 选择排序* 从小到大排序* 思路:* 1)第一趟比较时,找到最小的元素,然后这个最小元素和数组最左边(下标为0)的元素交换位置,这个最小值不再参与下次比较* 2)第二趟比较时,从下标为1的元素开始,找到最小的元素,然后把这个最小值元素和下标为1的元素交换位置,这个最小元素不再参与下次比较* 3)依次类推...* @param array* @return*/public static int[] selectionSort(int[] array) {int min;//最小值下标int in;//内层循环计数int out;//外层循环计数int len = array.length;for(out=0;out<len-1;out++) {min = out;//最小值下标初始化for(in=out+1;in<len;in++) {//如果有元素比array[min]小,则把下标赋给minif(array[in]<array[min]) {min = in;}}//内层循环每结束一次,就把找到的最小元素和外层循环开始的元素交换int temp = array[out];array[out] = array[min];array[min] = temp;}return array;}/*** 插入排序* 从小到大* 在外层的for循环中,out计数器从1开始,向右移动,它标记了未排序部分的最左端的数据;* 在内层的while循环中,in计数器从out开始,向左移动,直到temp变量(标志位)的值小于in所指的数组值和in不能再向左移动为止* while循环的每一趟都向右移动了一个已排序的元素* * * @param array* @return*/public static int[] insertSort(int[] array) {int in;//内层循环计数int out;//外层循环计数int len = array.length;for(out=1;out<len;out++) {//移出标志位值int temp = array[out];in = out;while(in>0 && array[in-1] >=temp) {//大于标志位的值,则右移array[in] = array[in-1];in--;//左移计数器
            }//插入标志为值array[in] = temp;}return array;}}

测试:

package cn.luxh.app.test;import org.junit.Test;public class SimpleSortTester {@Testpublic void testSort() {int[] array = {6,45,35,23,78,34,26,67,38,90,345,2345,12,3568,80,100};//SimpleSortUtil.bubbleSort(array);//SimpleSortUtil.selectionSort(array);
        SimpleSortUtil.insertSort(array);displayArray(array);}public void displayArray(int[] array) {for(int a:array) {System.out.println(a);}}}

转载于:https://www.cnblogs.com/zhoushengbing/p/3199713.html

冒泡排序、选择排序和插入相关推荐

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

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

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

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

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

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

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

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

  5. 选择排序,插入,快排,冒泡排序的时间空间复杂度详解

    时间复杂度 在算法的分析中,语句的执行次数T(n)是一个关于n(问题规模)的一个函数.分析n的变化引起T(n)的改变,进而得到T(n)的数量级,也就是时间频率.如果存在某一个辅助函数f(n),当n趋于 ...

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

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

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

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

  8. Java 知识点整理-7.StringBuffer类+冒泡排序+选择排序+二分法+Arrays类+基本数据类型的包装类

    1.StringBuffer类概述:线程安全的可变字符序列,一个类似于String的字符串缓冲区,但不能修改(不能像String那样用加号与其他类型数据连接),但通过某些方法调用可以改变该序列的长度和 ...

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

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

最新文章

  1. 小程序web开发框架-weweb介绍
  2. 【Android 逆向】Android 系统文件分析 ( /system/ 系统命令和系统应用数据目录 | /system/app/ 系统应用目录 | sys Linux 系统内核文件目录 )
  3. VMware ubuntu虚拟机怎么设置分辨率?(全屏显示、大屏显示)
  4. 自动驾驶小车循迹 图像二值化方法
  5. 如何用杠铃策略,构建你的“反脆弱性”
  6. Boost:boost::bimaps::list_of的测试程序
  7. 自定义EventSource(三)IncrementingEventCounter
  8. python编写代码时零_python – KeyError:运行打包代码时为0L
  9. 学PyTorch还是TensorFlow?
  10. idea 设置内存_IDEA新特性:提前知道代码怎么走!
  11. CCFA中国国际零售创新大会,观远数据用智能分析驱动零售决策
  12. prim算法适用条件_内部排序算法的比较及应用
  13. 使用 React Testing LIbrary 的 15 个常见错误
  14. 充值抖币显示苹果服务器异常,抖音充值抖币怎么充值不了
  15. 2048和多地址入口_七天网站成绩查询官网登录入口地址:http://www.7net.cc/
  16. SCP不会覆盖已有文件
  17. R语言绘制股票K线图
  18. 用户登录程序C语言实现
  19. RC522 - NFC刷卡模块
  20. JavaScript常用的工具函数,不全面大家补充哦

热门文章

  1. 步步为营UML建模系列总结
  2. shell磁盘监控自动化处理
  3. Python 网络爬虫的常用库汇总
  4. java 单个用户的多重并发会话_单个用户的多重并发会话限制/限制单客户端同时登录多个用户...
  5. 关于Topic和Partition
  6. 并发的发展历史-线程的出现
  7. idea 自动导入包和自动将没用的包去除
  8. flume的概述和运行机制
  9. 编码引出的问题_FileReader读取GBK格式的文件
  10. 数据库-检索部分-查找-更新表记录