当前位置:网站首页>【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)
边栏推荐
- TPAMI2022 | TransCL: based on the study the compression of the Transformer, more flexible and more powerful
- Soft Exam ----- UML Design and Analysis (Part 2)
- Fiddle设置接口数据用指定工具查看;Sublime Text设置json数据格式化转换
- Parse the commonly used methods in the List interface that are overridden by subclasses
- 【数据分析】:什么是数据分析?
- 网上那么多教人赚钱的方法,但是你实际上是靠什么赚钱的呢?
- Flutter with internationalized adapter automatically generated
- shell:条件语句
- 第七章 噪声
- postgresql autovaccum自动清理
猜你喜欢

Leetcode刷题——单调栈问题(739每日温度问题、496下一个更大元素I、503下一个更大元素 II)

Tencent YunMeng every jie: I experienced by cloud native authors efficiency best practices case

Flutter自带国际化适配自动生成方案

李沐动手学深度学习V2-BERT预训练和代码实现

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

如何解决图像分类中的类别不均衡问题?不妨试试分开学习表征和分类器

In action: 10 ways to implement delayed tasks, with code!

美国爱荷华州立大学| Improving Distantly Supervised Relation Extraction by Natural Language Inference(通过自然语言推理改进远程监督关系提取)

「 每日一练,快乐水题 」1374. 生成每种字符都是奇数个的字符串

.NET性能优化-你应该为集合类型设置初始大小
随机推荐
ABAP grammar small review
Implement fashion_minst clothing image classification
EasyExcel实现动态列解析和存表
信息学奥赛一本通(1257:Knight Moves)
信息学奥赛一本通(1256:献给阿尔吉侬的花束)
六石管理学:入门机会只有一次,先把产品做好
ssdp协议搜索GB28181设备
奥特学园ROS笔记--7(289-325节)
第七章 噪声
C# Barrier类
[AnXun cup 2019] easy_web
Bena的生命周期
Linphone 被叫方如何解析来电SIP消息中的自定义头消息
如何解决图像分类中的类别不均衡问题?不妨试试分开学习表征和分类器
js如何获取浏览器缩放比例
网上那么多教人赚钱的方法,但是你实际上是靠什么赚钱的呢?
APP自动化uiautomator2获取toast
.NET如何快速比较两个byte数组是否相等
Lvm逻辑卷
牛客题目——滑动窗口的最大值、矩阵最长递增路径、顺时针旋转矩阵、接雨水问题