当前位置:网站首页>【21天学习挑战赛】冒泡排序与插入排序
【21天学习挑战赛】冒泡排序与插入排序
2022-08-02 20:03:00 【小卢要刷力扣题】
冒泡排序
冒泡排序的英文Bubble Sort,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。
冒泡排序的步骤
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

代码
public static void bubbleSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
// 0 ~ N-1
// 0 ~ N-2
// 0 ~ N-3
for (int e = arr.length - 1; e > 0; e--) {
// 0 ~ e
for (int i = 0; i < e; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
}
}
}
}
// 交换arr的i和j位置上的值
public static void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
时间复杂度分析
因为有比较和交换行为,最差的情况就是每个元素从头交换到尾
例如[9,8,7,6,5,4,3,2,1,0]
因此时间复杂度为O(n2)
插入排序
插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
在生活中,最简单的例子就是扑克牌的排序了,
在排序扑克牌的时候,我们会把小的排插入到前面
只要会了如何排序扑克牌,那么就可以很快的理解插入排序了
代码
public static void insertionSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
// 不只1个数
for (int i = 1; i < arr.length; i++) {
// 0 ~ i 做到有序
for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
swap(arr, j, j + 1);
}
}
}
public static void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
时间复杂度
最差情况为每次小的元素都要从最后插到最前面
例如[9,8,7,6,5,4,3,2,1]
因此时间复杂度为O(n2)
边栏推荐
- 「每周译Go」这次我们来点不一样的!--《How to Code in Go》系列上线
- OP analysis and design
- golang 源码分析:juju/ratelimit
- 美国爱荷华州立大学| Improving Distantly Supervised Relation Extraction by Natural Language Inference(通过自然语言推理改进远程监督关系提取)
- Meta 与苹果的元宇宙碰撞
- 软件测试分类
- Five data structures of Redis and their corresponding usage scenarios
- 【LeetCode】1374. 生成每种字符都是奇数个的字符串
- setup语法糖 defineProps defineEmits defineExpose
- [AnXun cup 2019] easy_web
猜你喜欢

TPAMI2022 | TransCL:基于Transformer的压缩学习,更灵活更强大

AI科学家:自动发现物理系统的隐藏状态变量

4KMILES加入艾盛集团,以更强劲的数字商务能力,加速中国跨境电商的全域全效增长

pytorch的tensor创建和操作记录

LeetCode:622. 设计循环队列【模拟循环队列】

J9数字货币论:识别Web3新的稀缺性:开源开发者

SQL Server实现group_concat功能

Translate My Wonderful | July Moli Translation Program Winners Announced

AI Scientist: Automatically discover hidden state variables of physical systems

Introduction of uncommon interfaces of openlayers
随机推荐
信息学奥赛一本通(1259:【例9.3】求最长不下降序列)
Wintun:一款惊艳的 WireGuard 虚拟网卡接口驱动
信息学奥赛一本通(1260:【例9.4】拦截导弹(Noip1999))
The so-called fighting skill again gao also afraid of the chopper - partition, depots, table, and the merits of the distributed
【LeetCode】622. 设计循环队列
[AnXun cup 2019] easy_web
golang source code analysis: uber-go/ratelimit
Flutter with internationalized adapter automatically generated
Redis集群配置
实战:10 种实现延迟任务的方法,附代码!
基于 outline 实现头像剪裁以及预览
Triacetin是什么化学材料
解析Collection接口中的常用的被实现子类重写的方法
SQL 嵌套 N 层太长太难写怎么办?
美国爱荷华州立大学| Improving Distantly Supervised Relation Extraction by Natural Language Inference(通过自然语言推理改进远程监督关系提取)
shell:条件语句
对话亚洲高校首个博士论文奖-裘捷中丨KDD2022
解析List接口中的常用的被实现子类重写的方法
arm64麒麟安装paddlehub(国产化)
pytorch的tensor创建和操作记录