当前位置: 首页 > news >正文

时间复杂度为O(n2)的三种简单排序算法

1.冒泡排序

冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。
在这里插入图片描述

/*** 冒泡排序* 原地排序:是* 稳定排序:是* 空间复杂度:O(1)* 时间复杂度:最好O(n)——最坏O(n^2)——平均O(n^2)[有序度推算]* @param arr*/public static void bubbleSort(int[] arr) {int n = arr.length;if(n<=1) return;for(int i=0;i<n;i++) {boolean flag = false;for(int j=0;j<n-i-1;j++) {if(arr[j]>arr[j+1]) {int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;flag = true;}}if(!flag) break;}System.out.print("[ ");for(int i=0;i<n;i++) {System.out.print(arr[i]+" ");}System.out.println("]");}

2.插入排序

我们将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有⼀个元素,就是数组的第一个元素。插⼊算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插⼊位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。
在这里插入图片描述

/*** 插入排序* 原地排序:是* 稳定排序:是* 空间复杂度:O(1)* 时间复杂度:时间复杂度:最好O(n)——最坏O(n^2)——平均O(n^2)* @param arr*/public static void insertionSort(int[] arr) {int n = arr.length;//从下标为1的位置开始选择合适的位置插入,因为下标为0的只有一个元素,默认为有序for(int i=1;i<n;i++) {int value = arr[i];//记录要插入的数据int j=i-1;for(;j>=0;j--) {if(arr[j]>value) {arr[j+1] = arr[j];//移动数据}else {break;}}arr[j+1] = value;//保存比较小的数,插入}System.out.print("[ ");for(int i=0;i<n;i++) {System.out.print(arr[i]+" ");}System.out.println("]");}

3.选择排序

选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。
在这里插入图片描述

/*** 选择排序* 原地排序:是* 稳定排序:否* 空间复杂度:O(1)* 时间复杂度:时间复杂度:最好O(n^2)——最坏O(n^2)——平均O(n^2)* @param arr*/public static void selectionSort(int arr[]) {int n = arr.length;for(int i=0;i<n;i++) {int value = arr[i];int index = i;for(int j=i+1;j<n;j++) {if(arr[j]<value) {value = arr[j];index = j;}}if(i != index) {int temp = arr[i];arr[i] = arr[index];arr[index] = temp;}}System.out.println("============================");System.out.print("[ ");for(int k=0;k<n;k++) {System.out.print(arr[k]+" ");}System.out.println("]");}
http://www.lryc.cn/news/107100.html

相关文章:

  • LeetCode 热题 100 JavaScript --226. 翻转二叉树
  • hive所有窗口函数详情总结
  • Talk | 新加坡国立大学博士生施宇钧:DragDiffusion-基于扩散模型的关键点拖拽图片编辑
  • 22 | 贝叶斯分类算法
  • java.sql.SQLSyntaxErrorException: ORA-00909: 参数个数无效
  • 数据结构8-哈希表
  • vue3引用Font-Awesome字体图标库
  • Python: Django 服务部署可能遇到的一些问题
  • Python爬虫时遇到连接超时解决方案
  • 这所国字头双一流,根本招不满,学硕都没人报!
  • macos 查询端口占用 命令
  • 无代码开发:打破传统开发模式,引领数字化转型新方向
  • go-zero超强工具goctl的常用命令api,rpc,model及其构建的服务解析
  • 手机python编程软件怎么用,手机python编程软件下载
  • 【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
  • 家居行业解决方案 | 君子签电子签约助力家居企业减负增效
  • Nodejs 第五章(Npm run 原理)
  • 150. 逆波兰表达式求值
  • js中的设计模式
  • PostgreSQL:string_agg 多列值聚合成一列
  • 通向架构师的道路之apache_tomcat_https应用
  • iOS——锁与死锁问题
  • 恒运资本:股票总市值是什么意思?
  • Selenium Chrome Webdriver 如何获取 Youtube 悬停文本
  • 【LeetCode每日一题】——766.托普利茨矩阵
  • 第三方材料检测实验室LIMS系统源码 lims源码
  • 【数据结构与算法——TypeScript】数组、栈、队列、链表
  • [运维|中间件] Apache APISIX使用笔记
  • Android Intent 使用(详细版)
  • 【Clion 2】多行TODO使用